如何撤销 git add 操作(取消暂存)

撤销暂存:git restore --staged <文件>(Git 2.23+)或旧语法 git reset HEAD <文件>;全部取消暂存用 git restore --staged .。只动暂存区,工作区改动原样保留。

最佳实践
Git 提交历史与版本恢复示意

Git 2.23 起:git restore --staged <文件>;老版本用 git reset HEAD <文件>。两者都只把文件移出暂存区,工作区的改动原样保留,不会丢代码。

用法

git restore --staged src/app.js      # 单个文件
git restore --staged .               # 全部
git restore --staged src/            # 整个目录

# 旧语法(仍兼容)
git reset HEAD src/app.js
git reset                            # 全部取消暂存

三个"区"的关系

工作区 --git add--> 暂存区 --git commit--> 版本库
工作区 <--git restore-- 暂存区 <--git restore --staged-- 版本库状态
  • git restore --staged:暂存区 → 与 HEAD 一致(改动退回工作区);
  • git restore:工作区 → 与暂存区一致(丢弃未暂存改动)。

常见问题(FAQ)

Q:add 错文件后直接 commit 了怎么办?

没推送:git reset --soft HEAD^ 撤销提交(改动回暂存区),再 git restore --staged 错文件 剔除后重新提交。

Q:新文件 add 后 restore --staged 会怎样?

回到未跟踪状态,文件本身还在磁盘上。

Q:有没有"只取消暂存但保留部分暂存内容"的操作?

有:git reset -p(交互式选择要取消暂存的块),与 git add -p 是反向操作的好搭档。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台