遇到‘最近哪个提交把测试弄坏了’这类问题,可以让 git bisect 配合一个返回 0/非 0 的检查脚本自动二分,不用每个提交手动判断。
环境:Git 2.30+,POSIX shell。下面是一个最小例子:
mkdir bisect-demo && cd bisect-demo
git init -q
git config user.email [email protected]
git config user.name dev
printf 'ok\n' > value.txt
git add value.txt && git commit -qm 'good'
printf 'still ok\n' > value.txt
git commit -qam 'change 1'
printf 'broken\n' > value.txt
git commit -qam 'change 2'
printf 'more change\n' >> value.txt
git commit -qam 'change 3'
cat > check.sh <<'SH'
#!/bin/sh
grep -qx 'broken' value.txt
SH
chmod +x check.sh
git bisect start
git bisect bad HEAD
git bisect good HEAD~3
git bisect run ./check.sh
git bisect reset
脚本返回 0 表示当前提交通过,非 0 表示有问题;bisect run 会自动复现并缩小范围,最后指出第一个坏提交。检查脚本最好只依赖仓库内容,别把网络请求或本机状态带进去。