二分定位回归问题时,git bisect run 可以把“这次提交好不好”交给一个返回 0/非 0 的脚本,不用每个提交都手动判断。
环境:Git 2.30+,终端运行。下面造一个很小的仓库:
rm -rf bisect-demo && mkdir bisect-demo && cd bisect-demo
git init -q
git config user.email [email protected]
git config user.name dev
printf 'value=1\n' > app.txt
git add app.txt && git commit -qm 'good: initial'
printf 'value=2\n' > app.txt
git commit -qam 'good: update'
printf 'value=0\n' > app.txt
git commit -qam 'bad: regression'
cat > check.sh <<'SH'
#!/bin/sh
grep -qx 'value=2' app.txt
SH
chmod +x check.sh
git bisect start
git bisect bad HEAD
git bisect good HEAD~2
git bisect run ./check.sh
git bisect reset
脚本返回 0 表示当前提交通过,非 0 表示失败,Git 会自动缩小范围并打印第一个坏提交。实际项目里可以把 check.sh 换成一个最小回归测试;最后记得 git bisect reset 回到原来的分支。