如何在不重做合并流程的情况下解决Gerrit合并提交的冲突?
复用已解决冲突,仅处理B分支新提交的冲突
方法1:用Git rerere自动复用冲突解决方案
rerere(Reuse Recorded Resolution)是Git内置功能,能记住你解决过的冲突,下次遇到相同冲突时自动套用解决方案,避免重复劳动。
操作步骤:
- 开启rerere(全局生效,一次设置永久可用):
git config --global rerere.enabled true - 暂存当前已完成的合并提交:
git branch temp-merged - 切换到B分支,拉取最新提交:
git checkout B git pull origin B - 重新合并A分支:
此时Git会自动应用你之前解决过的冲突,你只需要处理B分支新提交带来的新冲突。git merge A - 解决新冲突后,完成合并并推送:
git add . git commit git push origin HEAD:refs/for/B
方法2:手动保存冲突解决结果,按需覆盖
如果不想依赖rerere,可以手动备份已解决的文件,在最新分支上合并后直接覆盖,只处理新冲突。
操作步骤:
- 备份已解决的合并文件:
mkdir temp-conflict-fixes git checkout temp-merged -- . cp -r ./* temp-conflict-fixes/ - 切换到最新B分支:
git checkout B git pull origin B - 合并A分支(此时会出现全部冲突):
git merge A - 用备份文件覆盖冲突文件,恢复之前的解决方案:
此时Git会识别出旧冲突已解决,仅剩B新提交带来的新冲突,专注解决这些即可。cp -r temp-conflict-fixes/* . git add . - 提交并推送:
git commit git push origin HEAD:refs/for/B
注意事项
- 如果之前的合并提交已推送到Gerrit被拒,先执行
git reset --hard HEAD~1回退到合并前状态,再执行上述步骤。 - rerere会自动记录所有冲突解决方案,后续同类冲突都会自动处理,适合长期使用。
内容的提问来源于stack exchange,提问作者bogs7
相关产品推荐
相关产品推荐

