我不小心在本地主分支上运行了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.
我如何撤销所有这些提交?
当前回答
暂存gitbranch-d the_local_branchgit checkout-t<远程名称>应用git存储
这对我有用。。!!
其他回答
如果您想要一个命令行解决方案,我建议您只使用MBO的答案。
如果您是新手,您可能会喜欢图形化方法:
启动gitk(从命令行,或在文件浏览器中单击鼠标右键(如果有))您可以很容易地在那里发现合并提交-从顶部开始的第一个节点有两个父节点按照第一个/左侧父级的链接(合并前当前分支上的父级,通常为红色)在所选提交上,右键单击“将分支重置到此处”,选择此处的硬重置
对于较新的Git版本,如果您尚未提交合并,并且存在合并冲突,您可以简单地执行以下操作:
git merge --abort
来自man git merge:
只有在合并导致冲突后才能运行[This]。gitmerge--abort将中止合并过程并尝试重建合并前的状态。
回答问题“撤销尚未推送的Git合并”
您可以使用git reset-hard HEAD~1
考虑以下情况,其中有2个分支主功能1:
$ git log --graph --oneline --all
执行Git合并
$ git merge feature-1
$ git log --graph --oneline --all
撤消Git合并
$ git reset --hard HEAD~1
$ git log --graph --oneline --all
作为一个额外的选项,我主要遵循这里描述的分支模型:http://nvie.com/posts/a-successful-git-branching-model/因此,通常都会与--no ff(无快进)合并。
我刚刚阅读了这个页面,因为我无意中将一个测试分支而不是我的发布分支与用于部署的master(网站,master是实时的)合并。测试分支有另外两个分支合并到它,总共有大约六个提交。
所以为了恢复整个提交,我只需要一个git重置--hardHEAD^,它就恢复了整个合并。由于合并没有快速进行,所以合并是一个块,后退一步就是“分支未合并”。
参见Git书的第4章和Linus Torvalds的原始帖子。
要撤消已推送的合并,请执行以下操作:
git revert -m 1 commit_hash
如果您再次提交分支,请务必还原还原,就像Linus所说的那样。