如何确定提交哈希以使用 git revert 撤消推送的合并?
我将 beta 分支合并到 master 分支中。 我推到了原点。 我现在希望 master 在本地和远程都保持合并之前的样子。
对于撤消已推送的合并有一个很好的答案建议
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,v2 源自 master。 一路上有一些从 master 到 v2 和 beta 的合并,因为我让新分支与 master 保持同步。 从 beta 到 master 方向的合并是一个我希望纠正的错误。
一旦我确定了合并点,如果我发现合并后在 master 上所做的任何提交确实应该在 beta 分支上,那么将它们移动的最佳方法是什么?
您需要找到合并的提交,
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
另请参阅 http://sethrobertson.github.com/GitFixUm/,它可以引导您解决几乎所有 git 问题,包括推送合并。 然而...推送合并没有简单的解决方案。