将分支rebase到master最新提交时能否仅用文件最终版本解决合并冲突
可行解决方案
你不需要保留提交历史的前提下,完全可以跳过逐提交冲突处理,以下是两种高效方案:
方案1:单次冲突解决的squash合并
不需要走rebase流程,直接合并C分支的最终状态,仅处理一次冲突:
- 先切换到master分支,拉取最新的M60提交:
git checkout master git pull
- 基于最新master新建目标分支:
git checkout -b 新分支名
- 执行squash合并,将原C分支的所有提交压缩为单次待提交变更:
git merge --squash 原C分支名
- 此时仅需要处理一次最终状态的合并冲突,DaVinci类文件你可以直接用原C分支的最终版本覆盖,无需纠结中间变更,冲突解决完成后直接commit即可。
最终得到的分支就是基于M60、仅包含单次提交、覆盖C分支所有最终改动的版本,完全符合你的预期提交结构。
方案2:最快的直接文件覆盖方案
适合DaVinci改动重写成本远低于解冲突的场景:
- 基于最新M60新建空白分支
- 将本地原C分支工作目录下除
.git文件夹外的所有文件,全量复制覆盖到新分支的工作目录 - 执行
git add .后直接提交即可,全程不需要处理任何冲突,相当于手动把最终要的改动全部搬过来,耗时比你重新做DaVinci改动还短。
注意事项
操作前可以先给原C分支打个备份标签,避免误操作丢失代码:
git tag c-branch-backup 原C分支名
如果用Git Extensions操作,合并弹窗里直接勾选「squash commit」选项就能实现上述squash合并效果,不用手动敲命令。
内容的提问来源于stack exchange,提问作者Trilokinath Modi
相关产品推荐
相关产品推荐

