改代码改到一半,文件里有些改动想留,有些又想先撤掉。这个时候别急着整文件 restore,可以用 -p 一段一段选。
环境:Git 2.30+。随便起个测试目录:
mkdir git-restore-p-demo && cd git-restore-p-demo
git init
printf 'one\ntwo\nthree\n' > note.txt
git add note.txt
git commit -m 'init'
python - <<'PY'
from pathlib import Path
p = Path('note.txt')
s = p.read_text()
s = s.replace('one', 'ONE')
s = s.replace('three', 'THREE')
p.write_text(s)
PY
git diff
git restore -p note.txt
执行到最后会进入交互选择,y 是丢掉当前这块,n 是保留当前这块。选完再跑:
git diff
适合那种“这个文件改杂了,但我只想回滚其中几处”的场景。要注意它改的是工作区内容,手抖的话还得靠编辑器撤销或者提交历史救回来,所以我一般会先看一眼 git diff。