我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?
合并后,git状态显示:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我如何撤销所有这些提交?
我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?
合并后,git状态显示:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我如何撤销所有这些提交?
当前回答
最简单的答案是奥迪尼奥-维尔蒙特给出的答案
首先执行git重置--合并ORIG_HEAD
对于那些希望在推送更改后重置的用户,请执行以下操作(因为这是第一篇关于git重置合并问题的文章)
git推原点HEAD—力
这将以这样一种方式重置,即您不会在拉动后再次获得合并的更改。
其他回答
如果您正在合并过程中,您可以随时中止它
git merge --abort
暂存gitbranch-d the_local_branchgit checkout-t<远程名称>应用git存储
这对我有用。。!!
您可以使用git reflog查找上一次结账。有时候,这是一个你想回到的好状态。
具体而言,
$ git reflog
$ git reset --hard HEAD@{0}
奇怪的是,缺少了最简单的命令。大多数答案都是有效的,但撤销你刚才做的合并,这是一种简单而安全的方法:
git reset --merge ORIG_HEAD
引用ORIG_HEAD将指向合并之前的原始提交。
(--merge选项与合并无关。它就像git-reset--hard ORIG_HEAD,但更安全,因为它不会触及未提交的更改。)
使用git reflog检查合并之前的提交(git refog将是比git log更好的选项)。然后,您可以使用以下方法重置它:
git reset --hard commit_sha
还有另一种方法:
git reset --hard HEAD~1
它会让你回到我的承诺。
请注意,任何已修改和未提交/未提交的文件都将重置为其未修改的状态。要保留它们,要么隐藏更改,要么查看下面的--merge选项。
正如@Velmont在下面的回答中所建议的,在这个直接案例中,使用:
git reset --hard ORIG_HEAD
可能会产生更好的结果,因为它应该保留您的更改。ORIG_HEAD将在合并发生之前直接指向提交,因此您不必自己寻找它。
另一个技巧是使用--merge开关而不是--hard,因为它不会不必要地重置文件:
git reset --merge ORIG_HEAD
--合并重置索引并更新<commit>和HEAD之间不同的工作树中的文件,但保留索引和工作树之间不同的文件(即具有尚未添加的更改)。