撤销一个尚未推送的 Git 合并操作

4847

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


合并后,git status显示:

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

如何撤销所有这些提交?


3
如果您需要保留历史记录,换句话说,如果有任何人曾经从您那里拉过或者您已经将其推到其他地方,请使用Yuri Ushakov在下面回答中提供的解决方案! - Sedrik
6
请取消当前获胜的答案,因为许多人指出它是不安全的,尽管仍在收集投票。对我来说,“MBO”看起来最好,尽管得分要少得多。 - inger
5
如果您需要保留历史记录,请使用下面 Yuri 的解决方案(在 @Sedrik 的评论中添加了一个链接)。 - cregox
相关:回退到之前的Git提交 - user456814
4
这是一个来自Github的很棒的资源: 使用Git撤销(几乎)任何操作 - jasonleonhard
Git - 三棵树的故事(头部、索引和工作树以非常有帮助的方式解释):重置解密 - leanne
35个回答

1

最简单的机会,比这里说的任何事情都要简单得多:

删除您的本地分支(本地而不是远程),然后再次拉取它。这样,您将撤消主分支上的更改,任何人都不会受到您不想推送的更改的影响。重新开始。


1
如果您已经提交了合并:
git reset HEAD~1
# Make sure what you are reverting is in fact the merge files
git add .
git reset --hard

0

如果您在合并后立即注意到需要还原,并且在合并尝试之后没有进行其他操作,您可以发出以下命令:git reset --hard HEAD@{1}

实际上,如果在合并后没有提交其他内容,则您的合并sha将指向HEAD@{0},因此HEAD@{1}将是合并之前的上一个点。


0
在这种情况下,您将想要使用 git reset --hard <branch_name> 重置您的分支。如果您想在重置之前保存更改,请务必创建一个新分支并使用 git checkout <branch_name>
您还可以使用 git reset --hard <commit_id> 将状态重置为特定提交。
如果更改已被推送,则可以使用 git revert <branch_name>。确保还要查看如何在其他情况下使用 git revert and git checkout

-13

您可以使用git-reset命令。

git-reset - 将当前HEAD重置为指定状态。 git reset [--mixed |

--soft | --hard | --merge] [-q] [] git reset [-q] []

[--] … git reset --patch

[] [--] […]

GIT-Reset


1
我尝试过 git resetgit reset --mergegit reset --hard,但是最终我仍然收到同样的消息,即比 origin/master 提前了 5 次提交。 - Matt Huggins

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