本地无提交跨分支工作副本合并的TortoiseSVN命令咨询
解决SVN三方合并迁移变更的问题
作为长期用Perforce的人,刚捡回SVN确实会有点别扭,不过咱们一步步理清楚你的场景:你要把带本地变更的WC_A,合并到全新检出的WC_B(Branch_B的工作副本),核心就是用SVN的三方合并逻辑,找到共同基线再合并差异。
先做个关键准备
如果WC_A的变更还没提交到版本库,建议先提交一下——这样变更被版本化后,合并操作会更安全、可追溯:
- 进入WC_A目录,执行:
提交后记一下新生成的版本号(比如svn commit -m "提交WC_A的本地修改"revN,可以用svn info查看)。
三方合并的正确命令
接下来切换到WC_B的根目录,根据你的分支基线情况选择对应命令:
情况1:Branch_B是从trunk_revy分支出来的
如果WC_A和WC_B的共同起点是trunk_revy,那直接合并trunk从revy到revN的变更即可:
svn merge -r revy:revN https://你的版本库URL/trunk .
情况2:Branch_B是从更早的trunk_revx分支出来的
如果Branch_B的基线是trunk_revx(和Branch_A同起点),那共同祖先是trunk_revx,需要合并trunk从revx到revN的完整变更:
svn merge -r revx:revN https://你的版本库URL/trunk .
合并后的收尾操作
- 命令执行后,SVN会自动合并变更,有冲突的文件会被标记出来,你需要手动修改冲突内容。
- 解决完冲突后,用
svn resolved <冲突文件名>标记冲突已处理。 - 最后验证代码没问题,提交到Branch_B:
svn commit -m "合并WC_A的变更到Branch_B"
要是不想先提交WC_A的变更?
如果只是临时迁移本地修改,也可以用补丁方式:
- 在WC_A目录生成补丁:
svn diff > my-changes.patch - 到WC_B目录应用补丁:
不过这种方式没有版本记录,还是更推荐先提交再做三方合并。patch -p0 < /path/to/my-changes.patch
内容的提问来源于stack exchange,提问作者Johann Studanski
相关产品推荐
相关产品推荐

