如何撤销Git中其他分支合并到当前分支的更改?
撤销分支合并的简便方法
别担心,这种场景在日常Git开发里挺常见的,给你两个针对性的解决方案,看你当前的情况来选:
情况1:合并分支y到x后,你还没在x上做新的提交
如果合并之后你没再往x上加任何自己的工作,那直接回退到合并前的状态就行:
- 先确认合并提交的位置:用
git log --oneline找到那条写着「Merge branch 'y' into x」的提交 - 执行回退命令:
git reset --hard HEAD~1
注意:这个操作会彻底丢弃合并后的所有改动,仅适合合并后没新增提交的场景;而且如果已经把
x推送到远程仓库了,千万别用这个,会改写公共历史,给团队带来麻烦。
情况2:合并y之后,你已经在x上完成了自己的工作(更常见的场景)
这种时候用git revert是最安全的选择,它不会改写历史,而是生成一个新的提交来撤销合并的改动:
- 先找到合并提交的哈希值:运行
git log --oneline,找到那条合并提交的哈希(比如开头的7位字符) - 执行撤销命令:
git revert -m 1 <合并提交的哈希>- 这里的
-m 1是指保留当前分支(也就是x)的基线,把来自y分支的改动全部撤销掉
- 这里的
- 执行完后Git会自动打开编辑器让你写撤销提交的说明,保存退出就行
这么操作之后,你的x分支里就不会包含y的任何改动了,直接提交到远程并创建Merge Request就可以。而且之后如果y分支准备好上线了,还能正常合并到主分支,不会有冲突或历史混乱的问题。
小提示:如果看log分不清合并提交,用
git log --graph --oneline能看到分支合并的图形化节点,更容易找到目标提交。
内容的提问来源于stack exchange,提问作者lukaszkups




