如何撤消对不久前发生的文件所做的部分更改。我有以下提交,并且在
A
和 B
到 file.txt
之间发生了意外更改:
...--A--B--...
我在
file.txt-B-A.patch
中有一个文件的差异补丁,它可以恢复所有更改。
然而,我只想撤消 file.txt
中的 某些更改,就像在合并冲突中手动选择更改一样。有没有办法不用修改补丁文件就可以做到这一点?
还有另一种方法可以做到这一点,根本不需要补丁文件。
问题发生在从
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
许多 git 命令都有
-p
选项(“补丁”)或 -i
(“交互式”)来部分执行某些操作。对于任意差异,我认为这不受支持,但您可以应用补丁,然后使用 git checkout -p -- <path(s)>
有选择地撤消未暂存的更改,例如git checkout -p -- .
如果您位于存储库的顶层。