Git: 如何反向合并提交?

使用 SVN 可以很容易地对提交进行反向合并,但是如何使用 Git 进行反向合并呢?

144796 次浏览

如果我没理解错的话,你说的是

svn merge -rn:n-1

退出之前的提交,在这种情况下,您可能正在寻找

git revert

要创建一个新的提交来“撤销”过去提交的更改,请使用:

$ git revert <commit-hash>

也有可能通过重新定基然后重新设置从过去的任意点删除提交,但是如果您已经将提交推送到另一个存储库(或者其他人已经从您那里提取了提交) ,那么您真的不想这样做。

如果您以前的提交是合并提交,则可以运行此命令

$ git revert -m 1 <commit-hash>

有关重新合并未合并的分支的正确方法,请参见 Schacon.github.io/git/howto/revert-a-faulty-merge.txt

要恢复 合并提交,您需要使用: git revert -m <parent number>。例如,要使用数字为1的父类恢复最近的合并提交,应该使用:

git revert -m 1 HEAD

要在最后一次提交之前恢复合并提交,您需要:

git revert -m 1 HEAD^

使用 git show <merge commit SHA1>查看父母,编号是他们出现的顺序,例如 Merge: e4c54b3 4725ad2

Git 合并文档: Http://schacon.github.com/git/git-merge.html

Git 合并讨论(令人困惑但非常详细) : Http://schacon.github.com/git/howto/revert-a-faulty-merge.txt

git reset --hard HEAD^

使用上面的命令恢复合并更改。

如果你不想提交,或者想以后再提交(提交消息仍然会为你准备,你也可以编辑它) :

git revert -n <commit>

Git Revt-m hash
M 代表静脉注射。
合并有两个父母。
如果将分支 A 合并到分支 B,则 B 为父1,而 A 为父2。
基本上,您指定,我想恢复提交 hash,它基于父 B 进行更改,然后您说
$git Revt-m 1 hash.

如果您是 git log,您将看到合并提交为

commit <hash>
Merge: <parent 1> <parent 2>
Author: Author <author@email.com>
Date:   Mon Oct 24 21:54:00 2022 +0000
comment message

检查日志中的 < father 1 > 和 < father 2 > ,就会知道要将这个提交恢复到哪个父/基。