有时候 git add . 手快,把暂时不想提交的文件也放进暂存区了。这个时候不用改工作区内容,只把它从 staged 里拿出来就行。
环境:Git 2.30+。可以开个小目录试一下:
mkdir git-unstage-demo && cd git-unstage-demo
git init
printf 'one\n' > a.txt
printf 'two\n' > b.txt
git add .
git status --short
git restore --staged b.txt
git status --short
第二次状态里,a.txt 还在暂存区,b.txt 会变成未暂存的改动。文件内容不会被删,只是从这次提交里先挪出去。
如果想退掉全部暂存,可以用:
git restore --staged .
我觉得这个比记 git reset HEAD <file> 更直观一点,尤其是给新同事解释的时候。