PR合并回滚后再次合并,如何让Git优先保留待合并分支的修改?
解决Git合并回滚后再次合并丢失修改的问题
当你回滚master上的合并操作时,Git会生成一个反向提交,这个提交的作用是撤销原PR的所有修改。此时Git的历史会判定:原PR的修改已经被“处理过”(被撤销了),所以当你再次尝试合并待合并分支时,它会认为master分支已经领先,直接跳过待合并分支的修改,导致内容丢失。
方法一:变基待合并分支(适合私有分支)
变基会把待合并分支的修改重新基于最新的master分支,让Git重新识别这些修改,步骤如下:
- 切换到你的待合并分支:
git checkout your-feature-branch - 拉取远程
master的最新版本:git fetch origin master - 执行变基操作:
git rebase origin/master- 若出现冲突,打开冲突文件手动解决,完成后执行
git add .,接着git rebase --continue,重复此过程直到变基完成
- 若出现冲突,打开冲突文件手动解决,完成后执行
- 切换回
master分支:git checkout master - 合并变基后的分支:
git merge your-feature-branch- 此时合并会是快进模式,待合并分支的所有修改都会被正确保留
方法二:撤销之前的回滚提交(适合公共分支)
如果不想修改分支历史(比如待合并分支是公开分支),可以先撤销master上的回滚提交,再合并修复后的分支:
- 用
git log查看历史,找到标注“撤销合并XXX”的回滚提交,记录它的哈希值ROLLBACK_COMMIT_HASH - 切换到
master分支:git checkout master - 撤销回滚提交:
git revert ROLLBACK_COMMIT_HASH- 这会生成一个新提交,将之前被回滚的修改重新恢复到
master上
- 这会生成一个新提交,将之前被回滚的修改重新恢复到
- 合并修复后的待合并分支:
git merge your-feature-branch- 此时Git会正常处理修复后的修改,解决可能的冲突后完成合并
内容的提问来源于stack exchange,提问作者HuLu ViCa
相关产品推荐
相关产品推荐

