git undo推送合并以恢复单独的分支

时间:2012-07-20 00:50:52

标签: git merge branch

首先,我要道歉 - 在SO上有很多'如何撤消合并'的问题,但是我对git这么新,以至于我真的不明白如何将解决方案适应我的情况(虽然我确信他们可以)。

我有两个分支versionAversionB。我在versionA中进行了一些更改,并将它们合并到versionB,这很好,因为versionA中所做的更改是向前兼容的。然后,我想我必须意外地将versionB合并回versionA,这不合适,因为versionB 不向向后兼容versionA

如何撤消此操作?

为了让事情变得更清楚,这就是我所做的:

versionA C--C--C--C'--M2
          \          /
           \        /
versionB C--M--C--C*

M: merged versionA into versionB. this is fine.
M2: accidentally merged versionB back into versionA

这就是我想要的:

versionA C--C--C--C'
          \         
           \       
versionB C--M--C--C*

如果我在Mercurial上我会做hg rollback并且一切都会好的,或者我hg update C'并在versionA分支进行未来的提交,尽管这会将M2留作悬空头(因此我更喜欢rollback方法)。

M2分支中清除最后一次提交versionA的git方法是什么? (所有更改都已推送)。

1 个答案:

答案 0 :(得分:1)

您需要找到合并的提交。

要查找合并提交,请尝试: git log versionA ^versionB --ancestry-path --merges

所需的提交是最后一次提交。

git revert -m 1 commit_hash

但请阅读Linus'写下:http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

另见:Which commit hash to undo a pushed merge using git-revert?