如何确定正确的提交哈希值以使用git-revert撤销已推送的合并?

8

我将beta分��合并到了主分支。我推送到了远程仓库。现在我想让主分支在本地和远程都回到合并之前的状态。

撤销已经推送的合并的一个好答案如下:

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派生而来。在这个过程中,在我将新的分支与主分支保持同步的同时,也有一些合并操作将主分支合并到v2和beta中。我想要纠正的是从beta到master的合并是一个错误。

一旦我确定了合并点,如果我发现在合并之后在主分支上进行的提交实际上应该在beta分支上,最好的移动方式是什么?


2
尝试使用 log --all --graph --pretty=tformat:'%Cred%h%Creset -%C(yellow)%d%Creset%s %Cgreen(%an %cr)%Creset' --abbrev-commit --date=relative 命令(我个人别名),它将显示所有分支的提交及其日期,以及合并发生的位置。 - Samy Dindane
2个回答

5
您需要找到合并的提交,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

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接