如何为git-revert确定正确的提交哈希来撤销推送的合并?

uqcuzwp8  于 2023-04-28  发布在  Git
关注(0)|答案(2)|浏览(127)

我把beta分支合并到master分支。我推到原点。我现在希望master在本地和远程合并之前保持原样。
undoing a merge that was already pushed的一个好答案是

git revert -m 1 commit_hash

如果这确实是要走的路,我如何确定commit_hash?我尝试了merge-base返回的hash失败:

$ 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分支上,什么是移动它们的最好方法?

pxq42qpu

pxq42qpu1#

您需要找到合并的提交,git merge-base告诉您可以进行合并的提交。它基本上是这两个分支中存在的最后一次提交。合并提交只存在于你的master分支中,除非你在合并后创建了一个新的分支,但这与此无关。:)
要查找合并提交,请尝试:git log master ^beta --ancestry-path --merges
所需的提交是最后一次提交。
但是请仔细阅读Linus的文章:http://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.txt

anauzrmj

anauzrmj2#

还可以看看http://sethrobertson.github.com/GitFixUm/,它可以引导你解决几乎所有的git问题,包括推送合并。然而……推送式合并并没有简单的解决方案。

相关问题