git add -p
可以将修改内容暂存,git checkout -p
可以交互式地丢弃修改。那么如何通过补丁的方式从索引中取消暂存的更改呢?
(我想也许git unstage -p
或者git reset HEAD -p
可以实现这个功能。)
git add -p
可以将修改内容暂存,git checkout -p
可以交互式地丢弃修改。那么如何通过补丁的方式从索引中取消暂存的更改呢?
(我想也许git unstage -p
或者git reset HEAD -p
可以实现这个功能。)
git reset -p
正好可以做到这一点。它的提示信息甚至就是 Unstage this hunk?
另外从手册中可以看到:
这意味着 git reset -p 是 git add -p 的相反操作,即你可以使用它来选择性地取消暂存 hunks。请参阅 git-add(1) 中的“交互模式”部分以了解如何操作 --patch 模式。
我发现这个回答在学习暂存时非常有用,所以我想修改它来操作取消暂存。由于在stackoverflow上没有找到关于“如何git取消暂存一行或部分文件”的详细回答。
如@manojlds所说,您可以使用git reset --patch <filename>
(也可以使用-p
代替--patch
),然后Git会将您的文件拆分为它认为合理的“块”(文件部分)。
然后Git会提示您与此类似的问题:
Unstage this hunk [y,n,q,a,d,g,/,j,J,k,K,s,e,?]?
关于 e 手动编辑的注意事项:使用上面的编辑 (e
) 模式时要格外小心,因为它并不直观。下面是一些内联的 Git 文档,我会包含并修改它们:
# To remove '+' lines, make them ' ' lines (context).
# To remove '-' lines, delete them.
# Lines starting with # will be removed.
为了更清晰:
+
开头的行都是当前已暂存要添加的行,现在将被取消暂存。为了保留那些不想被取消暂存的+
行 (即将它们留作已暂存的更改),请将初始+
替换为一个空格。-
开头的行都是当前已暂存要删除的行,现在将被取消暂存。为了保留那些不想被取消暂存的-
行 (即将它们留做已暂存的更改),请完全删除每一行。之后,您可以使用:
git diff --staged
检查您是否取消/暂存了正确的更改git add -p
暂存被错误删除的巨块(hunk)git commit -v
在编辑提交消息时查看您的提交。未来参考: Git工具 - 交互式暂存
由于尚未提及且希望不是非常明显:使用VScode。
仅在Mac上进行了测试。当前的VScode版本是1.80.1
这对我目前非常有效(对潜在的回复过时表示歉意)