跳到主要内容

Git 撤销 git add 操作指南

什么时候用

已经执行了 git add,但还没有 git commit,现在想把文件从暂存区拿出来,同时保留工作区里的修改。

先判断当前状态

git status --short
git diff --cached --name-only
  • git status --short 适合先确认哪些文件已经进入暂存区。
  • git diff --cached --name-only 只列出已暂存、准备进入下一次提交的文件。

推荐命令

场景推荐命令结果
撤销单个文件的暂存git restore --staged <file>文件从暂存区移出,工作区修改保留
撤销多个文件的暂存git restore --staged file1 file2多个文件一起移出暂存区
撤销当前目录下全部暂存git restore --staged .批量取消暂存

常见场景

只撤销一个文件

git restore --staged mock.png

撤销多个文件

git restore --staged README.md src/app.js

撤销全部已暂存内容

git restore --staged .

如果某个文件原本是新文件,撤销暂存后它会回到“未跟踪文件”状态,而不是被删除。

兼容写法

旧写法通常是:

git reset HEAD <file>
git reset HEAD

它们依然可用,但现在更推荐 git restore --staged,因为语义更直接,读起来也更清楚。

风险与边界

  • 这类命令只影响暂存区,不会删除你的工作区修改。
  • 如果你想连工作区改动一起丢弃,应该使用 git restore <file>,而不是只做 --staged
  • 如果文件已经提交过,撤销 git add 不会影响提交历史。

相关命令

git diff --cached              # 查看已经暂存但尚未提交的差异
git restore <file> # 丢弃工作区中的已跟踪改动
git restore --source=HEAD --staged --worktree <file> # 同时撤销暂存和工作区改动