首先,我要道歉 - 在SO上有很多'如何撤消合并'的问题,但是我对git这么新,以至于我真的不明白如何将解决方案适应我的情况(虽然我确信他们可以)。
我有两个分支versionA
和versionB
。我在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方法是什么? (所有更改都已推送)。
答案 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?