首页/开发/Git 与协作速查/git merge 的 ort 策略
合并变基与冲突71 条

git merge 的 ort 策略

ort 是当前默认合并策略,相比 recursive 在重命名、目录改名与长文件列表上更不容易误判,可显著减少「改了却没检测到」的假冲突。

Git 与协作速查开发更新于 2026-10-13

ort 合并策略是什么

ort 是 Git 当前的默认合并策略,从 2.34 起取代 recursive 成为 merge 与 rebase 的默认。相比旧策略,它在重命名检测、目录改名与长文件列表上的判断更准确,能减少「明明只改了一处却报冲突」这类误判,同时在大仓上的性能也更好。绝大多数情况下不需要显式指定,只是从老教程里抄参数时要留意版本差异。

基本信息

默认版本Git 2.34 起为 merge / rebase 的默认策略
优势重命名与目录变更跟踪更准,冲突提示更少
显式启用老版本可用 -s ort(2.33 起支持)
对比策略recursive、resolve、subtree 等
平台任意 Git 客户端

典型使用场景

  • 合并包含大量文件重命名的分支,减少误判冲突
  • 排查「改了却没检测到」的诡异合并结果
  • 从老教程抄来的 -s recursive 参数在新版本上的行为核对
  • 大仓库合并时的性能与冲突质量对比
  • 定位目录整体改名后的冲突成因
  • 升级 Git 后回归验证合并结果是否符合预期

相关选项示例

相关选项示例
git version                      # 先确认版本
git merge -s ort -X find-renames feature/rename   # 显式指定策略与选项
git merge -s recursive feature/legacy             # 旧写法,新版本上等同 ort
git merge -X rename-threshold=50 feature/rename   # 调整重命名判定阈值

策略关系

策略说明
ort当前默认,重命名与目录变更处理更准
recursive旧默认,新版本上已等同 ort
resolve更老的策略,仅适用于简单情形
策略与选项的支持范围随版本变化(recursive 自较新版本起已等同 ort);从老教程抄参数前先查当前版本文档。
重命名阈值等选项只在确有误判时再调,随意放宽会把真正的文件冲突掩盖掉。

遇到诡异合并结果时的排查顺序

  • 先 git version 确认版本,判断默认策略是否符合预期
  • 重放一次合并,用 -s ort 显式指定以排除策略差异
  • 检查分支里是否有大规模重命名被误判为删除加新增
  • 必要时用 -X find-renames 调整判定,再回归验证结果

易错点

  • 脚本里硬编码 recursive 在旧教程里常见,若仓库依赖 ort 行为,升级后要回归验证合并结果
  • 重命名阈值随意放宽会掩盖真正的文件冲突,只在确有误判时调整
  • 在不同版本上执行同一条合并命令可能得到不同结果,排查冲突前先确认版本
  • 把 ort 当成万能解药,真正的逻辑冲突仍需人工判断,它只影响合并的机械化部分
  • 在低版本上使用 -s ort 会报错,命令行不可用时先升级 Git 再考虑显式指定

数据来源与参考

  • Git 官方文档:git-merge(ort 策略与选项)
  • Git 2.33 / 2.34 Release Notes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌