如何撤消 git 中未暂存的部分更改,但将其余部分保持为未暂存状态?我想出的方法是:
git commit --interactive # Choose the parts I want to delete # Commit the changes git stash git rebase -i master # (I am an ancestor of master) # Delete the line of the most recent commit git stash apply
git commit --interactive这行得通,但如果有类似的东西只用于恢复更改,那就太好了。有更好的方法吗?
git commit --interactive
您可以使用git checkout -p,它允许您从工作副本和索引之间的差异中选择单独的块来恢复。同样,git add -p允许您选择要添加到索引的块,并git reset -p允许您从索引和 HEAD 之间的差异中选择单个块以退出索引。
git checkout -p
git add -p
git reset -p
$ git checkout -p file/to/partially/revert # or ... $ git checkout -p .
如果您希望事先对 git 存储库进行快照以在还原它们之前保留这些更改,我喜欢这样做:
$ git stash; git stash apply
如果你经常使用它,你可能想给它起别名:
[alias] checkpoint = !git stash; git stash apply
如果您使用良好的编辑器模式或插件,恢复单个块或行会更容易,它可以支持直接选择要恢复的行,因为-p有时使用起来有点笨拙。我使用Magit,这是一种 Emacs 模式,对使用 Git 非常有帮助。在 Magit 中,您可以运行magit- status,找到要还原的更改的差异,选择要还原的行(或者,如果您想一次还原一个大块,则只需将光标放在要还原的大块上,而不是一次一行),然后按k恢复那些特定的行。如果你使用 Emacs,我强烈推荐 Magit。
-p
magit- status
k