首页/开发/Git 与协作速查/git bisect run 自动化二分
Git 基础与命令88 条

git bisect run 自动化二分

无人值守二分:让脚本对每个候选版本执行验证,按退出码判定好/坏,自动收敛并输出结果。

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

自动化二分排查

无人值守的二分排查:让脚本对每个候选版本执行验证,按退出码判定好与坏,自动收敛并输出结果。它把「逐个检出再验证」压缩成一条命令,前提是验证脚本能在任意历史版本上构建并运行。

基本信息

用法把验证命令交给二分命令执行
判定规则退出码 0 视为正常,指定码视为跳过,其余非零视为有问题
前提条件脚本能在任意历史版本上完成构建与验证
操作流程先标记起点与终点,再用脚本自动推进
收尾查看结果后重置二分状态,回到原始分支

典型使用场景

  • 定位某个功能从哪个版本开始失效
  • 排查构建失败首次出现的提交
  • 自动化回归定位,减少人工逐个检出
  • 验证性能退化由哪次改动引入
  • 在提交量很大的区间内快速缩小范围

常用示例

常用示例
git bisect start HEAD v2.0       # 标记当前有问题、旧版本正常
git bisect run ./test-repro.sh   # 自动逐版本验证并收敛
git bisect run sh -c 'make >/dev/null && ./run-test'
git bisect reset                 # 结束二分并回到原始分支
git bisect log                   # 查看本次二分的过程记录

退出码含义

退出码含义
0该版本正常,问题不在这一侧
指定跳过码无法验证该提交,跳过继续
其他非零该版本有问题
异常退出中止自动过程,需要人工介入
为自动二分写一个「构建加复现」的脚本,比人工逐个检出验证快得多,也能避免不同人判断标准不一致。
验证耗时直接决定总耗时:把复现脚本压缩到分钟级,区间很大时才不至于等到失去耐心。
跳过码用于那些无法构建的历史版本,避免个别提交让整个自动流程报错中断。
二分结束后记得重置状态,否则仓库停留在某次中间检出上,后续操作都在错误基线上进行。

易错点

  • 脚本依赖的构建环境发生漂移,历史版本构建失败被误判为有问题,结论不可信
  • 一次验证耗时过长,自动二分看起来非常慢,脚本应压缩到分钟级完成判断
  • 忘记重置二分状态,仓库停在某个中间提交上,之后的操作都基于错误版本
  • 跳过码用得过多,区间里空白太大,最终定位到的提交范围不够精确

数据来源与参考

  • Git 官方文档:git-bisect(bisect run 退出码约定)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌