撤消部分未分档的git变更

如何在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 ,它可以让你从你的工作副本和索引之间的差异中选择个别区块来恢复。 同样, git add -p允许你选择hunks添加到索引中,而git reset -p允许你从索引和HEAD之间的差异中选择单独的hunk以退出索引。

$ 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。


git diff > patchfile

然后编辑patchfile并删除不想撤消的部分,然后:

patch -R < patchfile

你可以做

git checkout master -- path/to/file

对于每个要重置的文件。

链接地址: http://www.djcxy.com/p/24427.html

上一篇: Undo part of unstaged changes in git

下一篇: Object Expression as Computation Builder