首页/开发/Git 与协作速查/git bisect 二分定位回归
Git 基础与命令88 条

git bisect 二分定位回归

手动二分:start 进入流程,标记 good/bad 后逐次检出中点,收敛到引入问题的提交;结束时 reset 退出。

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

git bisect 是什么

git bisect 用二分法在一段历史里定位引入问题的提交:你标记一个已知正常的版本和一个已知有问题的版本,Git 每次检出中间那个提交请你验证,逐步把范围折半,直到锁定唯一一条提交。上千条提交大约十几次验证就能收敛。

手动模式与自动模式

默认是手动模式:每个中间提交由你实际验证后回答好或坏。如果问题可以用一条命令判定,还可以用 git bisect run 传入脚本,让流程自动跑完全程,适合回归测试能够覆盖的场景。两种模式都要记得最后 reset 退出。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git bisect start / good / bad / skip / reset
流程标记两端后逐步验证中点,直至收敛
自动模式git bisect run <命令> 自动判定
跳过bisect skip 用于无法验证的提交
退出git bisect reset 回到原分支

典型使用场景

  • 定位回归:找出哪次提交引入了崩溃或行为变化
  • 缩小范围:在发布分支与主干之间快速折半
  • 自动排查:用 run 配合测试脚本全自动定位
  • 处理不可用提交:某些提交编译不过时用 skip 跳过
  • 复盘交接:用 bisect log 保存验证过程便于核对

常用示例

常用示例
git bisect start
git bisect bad          # 当前版本有问题
git bisect good v1.4.0  # 这个标签是好的
git bisect good         # 检出的版本验证正常
git bisect bad          # 检出的版本验证异常
git bisect skip         # 这个提交无法验证
git bisect run npm test # 用命令自动判定
git bisect reset        # 结束并回到原分支

常用子命令

子命令作用注意
start进入二分流程可带两端参数一次写清
good / bad标记版本状态必须如实按验证结果标记
skip跳过无法验证的提交会略微增加验证次数
run用命令自动判定命令退出码决定结果
log输出判定记录便于复盘与交接
reset结束流程必须执行,否则停在分离头指针
提交数量上千时,二分法大约只需十几次验证就能锁定嫌疑提交,是定位回归问题的常规手段。
结束时务必执行 git bisect reset,否则工作区会停在分离头指针位置,后续提交容易落到想不到的地方。

易错点

  • 结束时务必执行 git bisect reset,否则工作区停在分离头指针位置容易迷路
  • 标记反了(good 与 bad 颠倒)会得出错误结论,先确认已知版本的真实表现
  • bisect 期间不要提交改动,流程结束前的任何提交都不属于正常历史
  • 用 run 时命令的退出码决定判定结果,脚本必须可靠地返回失败状态

数据来源与参考

  • Git 官方文档:git-bisect
  • Pro Git 2nd Edition · 7.10 使用 Git 调试
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌