预演合并是什么
它能在不改变工作区、也不建立任何引用的前提下试算两个分支合并的结果,回答「这两个分支能不能干净合并」。新版还可以把试算出的合并树写进对象库,并以退出码表达结论,非常适合放进流水线里做合并可行性检查。
基本信息
| 用途 | 无副作用地预演合并 |
|---|---|
| 基本语法 | git merge-tree <分支1> <分支2> |
| 新版模式 | git merge-tree --write-tree <分支1> <分支2>(Git 2.38 起) |
| 结论表达 | 退出码为 0 表示干净,非 0 表示存在冲突 |
| 依赖前提 | 本地已有的分支引用 |
典型使用场景
- 流水线里提前判断某次变更能否干净并入主干
- 评审前确认分支是否已经落后到产生冲突
- 排查「本地能合、服务端不能合」这类环境差异
- 脚本批量检查一批分支的合并可行性
- 不想改动工作区时快速试算合并结果
常用示例
常用示例
git merge-tree --write-tree main feature/login # 试算合并并写出合并树
git merge-tree --write-tree main feature/login >/dev/null; echo $? # 只看结论
git fetch origin && git branch -r --sort=-committerdate | head # 先同步再看分支
git rev-parse --short HEAD # 记录当前提交,确认没有副作用版本差异
| 版本 | 行为 | 适用 |
|---|---|---|
| 新版(2.38 起) | 写出合并树并用退出码表达结论 | 脚本与流水线 |
| 旧版基本用法 | 输出冲突与差异文本 | 人工查看 |
| 旧版简易模式 | 输出半差异文本流 | 格式难解析,不推荐 |
不需要检出或记录任何变更就能判断是否会冲突:新版用退出码表达结果,脚本直接判断即可,不必解析文本输出。
试算基于本地已有的引用,结果与索引和工作区无关;判断之前先同步远端,否则结论可能对应过期的分支状态。
放进流水线里的用法
- 先同步目标分支与候选分支,确保试算基于最新提交
- 用退出码判断结论,非零就视为存在冲突并中止后续步骤
- 把冲突文件清单打进日志,方便作者直接定位
- 需要继续验证时再进入真实的合并流程