我不小心在本地主分支上运行了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重置f836e4c1fa51524658b9f026eb5efa24af3a36或使用--hard(这将删除所有本地的、未提交的更改!):$git重置f836e4c1fa51524658b9f026eb5efa24af3a36--硬使用错误合并提交之前的哈希。通过以下方式检查要在先前正确版本的顶部重新提交的提交:$git日志4c3e23f529b581c3cbe95350e84e66e3cb05704f提交4c3e23f529b581c3cbe95350e84e66e3cb05704f...提交16b373a96b0a353f7454b141f7aa6f548c979d0a...通过以下方式在存储库的正确版本顶部应用正确的提交:通过使用cherry-pick(一些现有提交引入的更改)git樱桃pick ec59ab844cf504e462f011c8cc7e5667bb2e9c7或者通过以下方式选择提交范围:在合并之前首先检查正确的更改:数字差异5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f在合并之前首先检查正确的更改:git cherry pick 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f其中这是您提交的正确提交的范围(不包括错误提交的合并)。
其他回答
如果您想要一个命令行解决方案,我建议您只使用MBO的答案。
如果您是新手,您可能会喜欢图形化方法:
启动gitk(从命令行,或在文件浏览器中单击鼠标右键(如果有))您可以很容易地在那里发现合并提交-从顶部开始的第一个节点有两个父节点按照第一个/左侧父级的链接(合并前当前分支上的父级,通常为红色)在所选提交上,右键单击“将分支重置到此处”,选择此处的硬重置
如果没有冲突和合并完成,则:
git reset --hard HEAD~1
如果在执行合并时发生冲突,则中止将使您退出最近的合并更改:
git merge --abort
或者如果您想恢复到特定的提交id。
git reset --hard <commit-id>
我能够用一个不需要查找提交id的命令解决这个问题。
git reset --hard remotes/origin/HEAD
接受的答案对我不起作用,但这个命令实现了我所期望的结果。
它可以通过多种方式实现。
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 checkout -f
它将撤消合并(以及您所做的一切)。