Git分支合并异常:example1混入example2代码,如何撤销合并?
问题原因
- 你在准备把example1合并到dev的过程中,大概率是先在example1分支上执行了
git merge dev操作(通常是为了解决合并冲突)。此时dev已经包含了example2的合并结果,这次合并会把dev里的所有变更(包括example2的代码)都同步到example1分支里。 - 后续你把example1合并到main时,这些来自example2的变更自然就被一起带进去了。
撤销example1分支中的合并操作
根据你的分支是否已推送到远程,有两种可行的解决方式:
方式1:用git reset回退到合并前状态(适合可强制推送的场景)
- 切换到example1分支:
git checkout example1 - 查看提交日志找到合并前的提交哈希:
git log --oneline,找到合并提交(带有Merge标记的那条)的上一条提交记录,复制它的哈希值 - 硬重置到该提交:
git reset --hard <合并前的提交哈希> - 如果已经推送到远程仓库,执行强制推送覆盖:
git push origin example1 --force
方式2:用git revert撤销合并提交(适合不能强制推送的场景)
如果你的example1分支已经推送到远程,且团队不允许强制推送(避免影响其他协作者),可以用这种方式:
- 切换到example1分支:
git checkout example1 - 查看提交日志找到合并提交的哈希:
git log --oneline,找到那条带有Merge标记的合并提交,复制它的哈希值 - 执行撤销操作:
git revert -m 1 <合并提交的哈希>-m 1的作用是保留example1分支原本的内容,丢弃来自dev分支的合并内容
- 推送撤销后的提交到远程:
git push origin example1
内容的提问来源于stack exchange,提问作者Guilherme Migliano
相关产品推荐
相关产品推荐

