2

首先,我必须道歉 - 关于 SO 有很多“如何撤消合并”问题,但我对 git 太陌生了,我真的不明白如何根据我的情况调整解决方案(尽管我相信他们可以)。

我有两个分支,versionA并且versionB. 我做了一些更改versionA并将它们合并到versionB中,这很好,因为所做的更改versionA是向前兼容的。然后,我想我一定是不小心合并versionBversionA,这不好,因为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方法)。

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

4

1 回答 1

1

You need to find the commit of the merge.

To find the merge commit try: git log versionA ^versionB --ancestry-path --merges

The needed commit is the very last commit.

git revert -m 1 commit_hash

But please read up on Linus' write up: http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

Also see: Which commit hash to undo a pushed merge using git-revert?

于 2012-07-20T01:04:08.417 回答