Git 撤消对文件的部分更改

问题描述 投票:0回答:2

如何撤消对不久前发生的文件所做的部分更改。我有以下提交,并且在

A
B
file.txt
之间发生了意外更改:

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

我在

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

git merge undo
2个回答
13
投票

还有另一种方法可以做到这一点,根本不需要补丁文件。

问题发生在从

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

12
投票

许多 git 命令都有

-p
选项(“补丁”)或
-i
(“交互式”)来部分执行某些操作。对于任意差异,我认为这不受支持,但您可以应用补丁,然后使用
git checkout -p -- <path(s)>
有选择地撤消未暂存的更改,例如
git checkout -p -- .
如果您位于存储库的顶层。

© www.soinside.com 2019 - 2024. All rights reserved.