我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?


合并后,git状态显示:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

我如何撤销所有这些提交?


当前回答

如果您注意到需要在合并后立即恢复,并且在合并尝试后还没有做任何其他操作,则只需发出以下命令:git reset--hard HEAD@{1}。

本质上,如果在合并之后没有提交任何其他内容,那么合并sha将指向HEAD@{0},因此HEAD@{1}将是合并之前的前一点。

其他回答

参见Git书的第4章和Linus Torvalds的原始帖子。

要撤消已推送的合并,请执行以下操作:

git revert -m 1 commit_hash

如果您再次提交分支,请务必还原还原,就像Linus所说的那样。

回答问题“撤销尚未推送的Git合并”

您可以使用git reset-hard HEAD~1

考虑以下情况,其中有2个分支主功能1:


$ git log --graph --oneline --all

执行Git合并

$ git merge feature-1

$ git log --graph --oneline --all

撤消Git合并

$ git reset --hard HEAD~1

$ git log --graph --oneline --all

如果您想要一个命令行解决方案,我建议您只使用MBO的答案。

如果您是新手,您可能会喜欢图形化方法:

启动gitk(从命令行,或在文件浏览器中单击鼠标右键(如果有))您可以很容易地在那里发现合并提交-从顶部开始的第一个节点有两个父节点按照第一个/左侧父级的链接(合并前当前分支上的父级,通常为红色)在所选提交上,右键单击“将分支重置到此处”,选择此处的硬重置

使用此命令中止合并:

git merge—中止

如果分支被合并而未被推送,则下面给出的git reset命令将用于撤消合并:

git reset --merge ORIG_HEAD

例子:

git reset --merge origin/master