误把文件 git add 了,可以用 git restore --staged 撤回

17 次浏览2 条回复

有时候手快把一堆文件加进暂存区,其实不一定要重新改工作区,只撤出暂存就行。

环境:Git 2.23+,在仓库根目录执行:

git restore --staged path/to/file

# 撤回当前目录下所有暂存改动
git restore --staged .

这个命令只会把文件从 staged 变回 unstaged,不会丢掉工作区里的修改。撤完可以再看一眼:

git status

如果是想连工作区修改也一起丢掉,那就是另一个动作了,别顺手把两个命令混着用。

补一个小点:如果机器上的 Git 比较老,还没 restore,同样只撤暂存一般可以用:

git reset HEAD -- path/to/file

不过新项目里我也更倾向写 restore --staged,语义清楚一点,不容易和丢工作区改动的命令混在一起。

我一般撤之前会先看一眼暂存区到底有什么:

git diff --cached

尤其是分批提交的时候,先确认 staged 里哪些改动还要留着,再 git restore --staged path/to/file 会稳一点。撤完再跑一次也很直观。