我将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分支上,最好的移动方式是什么?
log --all --graph --pretty=tformat:'%Cred%h%Creset -%C(yellow)%d%Creset%s %Cgreen(%an %cr)%Creset' --abbrev-commit --date=relative
命令(我个人别名),它将显示所有分支的提交及其日期,以及合并发生的位置。 - Samy Dindane