git bisect
通过二分法在提交历史中快速定位引入 bug 的那次提交
语法
git bisect <subcommand> [<options>]
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
start |
开始二分查找 | |
常用 |
bad [<rev>] |
标记当前或指定提交为有问题的 | |
常用 |
good [<rev>] |
标记当前或指定提交为正常的 | |
常用 |
reset |
结束二分查找,回到原始分支 | |
常用 |
run <script> |
自动化二分查找,用脚本判断好坏 | |
常用 |
示例
开始二分查找:当前有 bug,v1.0.0 正常
git bisect start git bisect bad HEAD git bisect good v1.0.0
Bisecting: 12 revisions left to test
测试后标记当前检出的提交为正常
git bisect good
测试后标记当前检出的提交为有问题
git bisect bad
查找结束,回到原来的分支
git bisect reset
自动运行测试脚本来判断每个提交的好坏
git bisect run npm test
技巧
- 100 个提交只需要约 7 次测试就能定位问题(log2(100)≈7)
- bisect run 配合自动化测试可以完全无人值守地定位 bug
- 找到问题提交后用 git show 查看具体改了什么
- 记得最后执行 git bisect reset 回到正常状态