【发布时间】:2012-07-18 18:51:12
【问题描述】:
我将 beta 分支合并到 master 分支。我推到原点。我现在希望 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,v2 源自 master。在此过程中,随着我使新分支与 master 保持同步,从 master 到 v2 和 beta 进行了一些合并。从 beta 到 master 方向的合并是一个我希望纠正的错误。
一旦我确定了合并点,如果我发现合并后在 master 上所做的任何提交确实应该在 beta 分支上,那么将它们移过来的最佳方法是什么?
【问题讨论】:
-
试试
log --all --graph --pretty=tformat:'%Cred%h%Creset -%C(yellow)%d%Creset%s %Cgreen(%an %cr)%Creset' --abbrev-commit --date=relative(我个人给它起了别名),它将显示所有分支的提交及其日期,以及合并发生在哪里。
标签: git undo git-merge git-log git-revert