如何在 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 checkout -p
,它允许您从工作副本和索引之间的差异中选择要恢复的个人数据 block 。同样,git add -p
允许您选择要添加到索引中的帅哥,以及 git reset -p
允许您从索引和 HEAD 之间的差异中选择单个 block 以退出索引。
$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .
如果您希望预先对您的 git 存储库进行快照以在还原之前保留这些更改,我喜欢这样做:
$ git stash; git stash apply
如果你经常使用它,你可能想给它取个别名:
[alias]
checkpoint = !git stash; git stash apply
如果你使用一个好的编辑器模式或插件,恢复单个 block 或行会更容易,这可能会支持直接选择要恢复的行,因为 -p
使用起来有点笨拙有时。我用 Magit ,一种对使用 Git 非常有帮助的 Emacs 模式。在 Magit 中,你可以运行 magit-status
,找到你想要恢复的变化的差异,选择你想要恢复的行(或者简单地将光标放在你想要恢复的 block 上,如果你想要一次还原一大块而不是一次还原一行),然后按 k
还原那些特定的行。如果您使用 Emacs,我强烈推荐 Magit。
关于git - 撤消git中未暂存的部分更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981830/