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> # 同时撤销暂存和工作区改动