知道‘现在坏、以前好’,但中间提交很多时,可以让 Git 二分定位,而不是手工一个个翻:
git bisect start
git bisect bad HEAD
git bisect good <已知正常的提交>
git bisect run pytest -q tests/test_login.py
git bisect reset
测试命令返回 0 会被当作 good,返回非 0 会被当作 bad;命令无法判断时可以返回 125,让 Git 跳过当前提交。跑完后 git bisect reset 会回到开始前的分支。
环境:Git 2.x,项目使用 pytest 7+。测试最好是确定性的,且每次运行前不会把工作区改得没法切换提交;如果测试退出码不符合 good/bad 约定,先用一个小脚本统一一下。