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


合并后,git状态显示:

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

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


当前回答

它可以通过多种方式实现。

1) 中止合并

如果您处于错误合并(错误地使用了错误的分支)之间,并且希望避免合并,以便最新返回分支,如下所示:

git merge --abort

2) 将HEAD重置为远程分支

如果您从远程开发分支工作,可以将HEAD重置为远程分支上的最后一次提交,如下所示:

git reset --hard origin/develop

3) 删除当前分支,然后再次从远程存储库签出

考虑到您正在本地repo中开发分支,该分支与远程/开发分支同步,您可以执行以下操作:

git checkout master 
##to delete one branch, you need to be on another branch, otherwise you will fall with the branch :) 

git branch -D develop
git checkout -b develop origin/develop

其他回答

您应该重置为上一次提交。这应该是有效的:

git reset --hard HEAD^

或者甚至HEAD^^还原该还原提交。如果您不确定应该后退多少步,您可以始终提供完整的SHA参考。

如果出现问题,并且主分支没有任何本地更改,则可以重置为原始/主分支。

最简单的答案是奥迪尼奥-维尔蒙特给出的答案

首先执行git重置--合并ORIG_HEAD

对于那些希望在推送更改后重置的用户,请执行以下操作(因为这是第一篇关于git重置合并问题的文章)

git推原点HEAD—力

这将以这样一种方式重置,即您不会在拉动后再次获得合并的更改。

到了这个问题,我们也希望恢复到与原点匹配(即,在原点之前没有提交)。进一步研究发现,有一个重置命令正是针对这一点:

git重置--硬@{u}

注意:@{u}是origin/master的简写。(当然,您需要远程存储库才能实现这一点。)

好吧,这里的其他人给我的答案很接近,但没用。这是我所做的。

正在执行此操作。。。

git reset --hard HEAD^
git status

…给了我以下状态。

# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.

然后,我不得不多次输入相同的git重置命令。每次我这样做时,信息都会改变一个,如下所示。

> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.

此时,我看到状态消息发生了变化,所以我尝试进行git拉动,这似乎奏效了:

> git pull
Updating 2df6af4..12bbd2f
Fast forward
 app/views/truncated |    9 ++++++---
 app/views/truncated |   13 +++++++++++++
 app/views/truncated |    2 +-
 3 files changed, 20 insertions(+), 4 deletions(-)
> git status
# On branch master

长话短说,我的命令归结为:

git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git pull

如果没有冲突和合并完成,则:

  git reset --hard HEAD~1

如果在执行合并时发生冲突,则中止将使您退出最近的合并更改:

git merge --abort

或者如果您想恢复到特定的提交id。

 git reset --hard <commit-id>