Git撤消对文件的部分更改

时间:2013-03-21 13:54:52

标签: git merge undo

如何撤消应用于一段时间内发生的文件的部分更改。 我有以下提交,AB到'file.txt'之间发生了意外更改

...--A--B--...

我在file.txt-B-A.patch中有一个文件的差异补丁,可以恢复所有更改。 但是,我只想撤消file.txt中的某些更改,就像手动选择合并冲突中的更改一样。有没有办法在不修改补丁文件的情况下这样做?

2 个答案:

答案 0 :(得分:8)

还有另一种方法可以完全不需要补丁文件。

问题从A发送到B,因此请先恢复B中的更改,但不要自动提交。

$ git revert --no-commit <commit hash of B>

git revert所做的更改会暂停。取消他们。

$ git reset HEAD

接下来,以交互方式浏览file.txt并仅暂存您要保留的更改。

$ git add --patch file.txt

现在只会暂存您选择的还原。提交他们。

$ git commit

最后,清除git revert的未分期剩余物。

$ git reset --hard

答案 1 :(得分:6)

许多git命令都有-p选项(“patch”)或-i(“interactive”)来部分执行某些操作。对于任意差异我不认为这是支持的,但您可以应用补丁,然后使用git checkout -p -- <path(s)>选择性地撤消未分阶段的更改,例如git checkout -p -- .如果您处于回购的顶层。

相关问题