我将beta分支合并到主分支中。我推到原点。我现在希望master在本地和远程合并之前就像它一样。
undoing a merge that was already pushed的好答案建议
git revert -m 1 commit_hash
如果确实如此,我该如何确定 commit_hash ?我没有成功尝试merge-base返回的哈希:
$ git merge-base --all master beta
1f4b949b7ef97abf913ae672e3acd0907abfac1b
$ git revert -m 1 1f4b949b7ef97abf913ae672e3acd0907abfac1b
error: Mainline was specified but commit 1f4b949b7ef97abf913ae672e3acd0907abfac1b is not a merge.
fatal: revert failed
我已经检查了分支的git-log和gitk演绎,但是它们很长,我不太清楚我的解释,觉得我应该寻求帮助,然后再做一个更大的混乱。 Beta来自v2,它来自master。随着我与主人保持最新的分支机构,我们已经有一些从大师到v2和beta的合并。从beta到Master的方向的合并是我想要纠正的错误。
一旦确定了合并点,如果我发现在合并后真正应该在beta分支上对master进行的任何提交,那么移动它们的最佳方法是什么?
答案 0 :(得分:4)
您需要找到合并的提交,git merge-base
告诉您提交可以进行合并的位置。它基本上是这两个分支中存在的最后一个提交。合并提交仅存在于主分支中,除非您在合并后创建了新分支,但这与此处无关。 :)
要查找合并提交,请尝试:
git log master ^beta --ancestry-path --merges
所需的提交是最后一次提交。
但请阅读Linus的文章:http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt
答案 1 :(得分:1)
另请参阅http://sethrobertson.github.com/GitFixUm/,它会引导您解决几乎任何git问题,包括推送合并。然而......推动合并没有简单的解决方案。