>> >> >> Reference << << << <<<<<<Ref>>>>>>
bisect
Modified: 2025-12-31 | Author:ljf12825

在代码库里某个时间点引入了bug,但不知道是哪一次提交导致的
只知道:

手动一条条提交去差太慢了。git bisect就是用二分查找的思想来快速缩小范围,最后精确定位是哪一次提交引入了问题

基本流程

假设在main分支上

  1. 启动bisect
git bisect start
  1. 告诉Git哪个是坏的提交(通常是当前的HEAD)
git bisect bad
  1. 告诉Git哪个是好的提交(比如记得某个旧版本能正常工作)
git bisect good <commit_hash>
  1. Git会自动checkout到两者之间的一个“中间提交”,让你测试
  1. Git会继续缩小范围,直到最后定位到“第一个坏提交”
  2. 找到后,执行
git bisect reset

回到原来的分支状态

自动化测试

如果有一个脚本可以自动判断“好/坏”,git bisect可以全自动完成
例如有个test.h,返回0表示好,返回非零表示坏

git bisect start
git bisect bad
git bisect good <commit_hash>
git bisect run ./test.sh

它会自动在中间提交跑脚本,直到定位出问题提交

使用场景