问题

在我的主分支中,我在本地做了一个git merge some-other-branch,但从未将更改推送到原始主人.我没有意味着合并,所以我想撤销它.在我合并后做git status时,我收到此消息:

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

根据一些指令我发现,我尝试运行

 git revert HEAD -m 1
 

但现在我用git status收到此消息:

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

我不希望我的分支得到任何数量的提交.如何回到这一点?

  最佳答案

使用git reflog检查哪个提交是合并之前的一个(git reflog将是比git log更好的选项).然后您可以使用以下方法重置它:

 git reset --hard commit_sha
 

还有另一种方法:

 git reset --hard HEAD~1
 

它会让你回到1个提交。

请注意,任何修改和未提交/未提交的文件将被重置为未修改的状态.为了保持它们的stash更改或见下面的--merge选项.


正如@Velmont在他的答案中建议的那样,在这种直接情况下使用:

 git reset --hard ORIG_HEAD
 

可能会产生更好的结果,因为它应该保留您的更改. ORIG_HEAD将在合并发生之前直接指向提交,所以您不必自己寻找它.


另一个提示是使用--merge切换而不是--hard,因为它不会不必要地重置文件:

 git reset --merge ORIG_HEAD
 

–merge

重置索引并更新工作树中与 和 HEAD 不同的文件,但保留索引和工作树之间不同的文件(即没有添加的更改)。

  相同标签的其他问题

gitundogit-merge