在SVN合并时能否自主决定每一处变更?分支整合故障咨询
当然可以手动掌控SVN合并的每一处变更!
完全没问题!当SVN自动合并搞出乱子、丢了两边重要变更的时候,手动接管合并过程,自己决定每一处代码的取舍,是非常靠谱的解决方案。下面给你一步步讲怎么做:
先确保分支状态干净
先检查你的功能分支有没有未提交的本地修改,执行svn status确认状态。如果有未提交的内容,先提交或者暂存(用svn stash),避免合并时更混乱。执行合并并触发手动冲突处理
切换到你的功能分支目录,执行合并命令:svn merge ^/trunk这里
^/trunk是你的主干路径,如果主干路径不一样,替换成实际的路径就行。SVN会尝试合并,但遇到无法自动解决的冲突时,会把文件标记为C(冲突状态),不会擅自覆盖任何内容。👉 合并前可以先用
svn merge --dry-run ^/trunk预览一下会有哪些变更,心里有个数。逐个处理冲突文件
用svn status列出所有冲突文件,然后逐个打开编辑:- 文件里会有SVN自动插入的冲突标记:
其中<<<<<<< .mine # 这里是你功能分支上的代码 ======= # 这里是主干上的变更代码 >>>>>>> .rXXXX.mine代表你的功能分支版本,.rXXXX是主干的对应版本号。 - 你需要手动编辑这段内容,保留你认为正确的代码(可以混合两边的逻辑),然后删掉所有冲突标记(
<<<<<<<、=======、>>>>>>>这些)。
- 文件里会有SVN自动插入的冲突标记:
标记冲突已解决
处理完一个文件的冲突后,执行:svn resolved 文件名告诉SVN这个文件的冲突已经处理好了,状态会变回正常的修改状态(
M)。提交合并结果
所有冲突都处理完后,再次用svn status确认没有遗漏的冲突,然后提交:svn commit -m "手动合并主干trunk至功能分支:处理了X处冲突,保留了双方重要变更"提交信息一定要写清楚,方便后续追溯。
一些额外的小贴士
- 合并前务必执行
svn update,确保你的本地功能分支是最新的远程状态,减少不必要的冲突。 - 如果某段代码的取舍拿不准,别硬扛,找负责主干对应变更的同事聊一聊,确认需求后再做决定。
- 合并完成后,一定要跑一遍完整的测试,确保功能正常,没有因为手动合并引入新的bug。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

