svn 可用 svn merge -c 一次性合并非连续版本,如 -c 105 -c 108 -c 112,每项精准应用对应修订变更;务必先 --dry-run 验证,再手动解决冲突并提交。

直接用 svn merge -c 参数,一条命令就能合并非连续的多个版本,比如 r105、r108、r112。
明确指定每个要合并的版本号
SVN 的 -c(--change)选项专为这种场景设计。它表示“只合并某一次特定修订的变更”,可重复使用多次,支持任意顺序、任意组合。
svn merge -c 105 -c 108 -c 112 http://svn.example.com/repo/branches/feature ./- 每项
-c N都会把版本 N 的全部改动(增删改)反向应用到当前工作目录 - 即使这些版本在时间上不连续、提交人不同、修改文件无交集,也能准确提取并合并
避免误合并:先用 --dry-run 验证
执行前务必加 --dry-run 查看实际影响范围,防止漏掉或错合。
svn merge -c 105 -c 108 -c 112 --dry-run http://svn.example.com/repo/branches/feature ./- 输出中会列出将被更新(U)、新增(A)、删除(D)的文件,确认无误再去掉
--dry-run - 如果看到意外文件,说明某个版本改动了你不期望的内容,可临时剔除该
-c项
处理冲突与提交
合并后不是自动生效,需手动检查、解决冲突、再提交。
- 运行真实 merge 后,执行
svn status查看哪些文件标为C(conflicted) - 用
svn resolve --accept=working 文件名标记已解决,或用编辑器手动编辑冲突标记(/ <code>=======/>>>>>>) - 全部解决后,
svn commit -m "merge r105,r108,r112 from feature branch"
补充技巧:从日志快速提取版本号
如果要合并的版本来自某段开发记录,可用 log 快速筛选:
-
svn log -l 50 | grep "fix login bug\|add retry logic"找出相关提交 -
svn log --xml | xpath '//logentry/@revision' 2>/dev/null | tr -d '"' | head -n 3(Linux/macOS)提取前3个 revision - 把结果复制进
svn merge -c命令即可,无需人工数版本号











