Menu
CoddyTech

Git Bisect

最后更新

git bisect 通过二分查找,找出引入 bug 的那个提交。你告诉它一个确定正常的提交和一个确定有问题的提交;它会检出两者中间的一个提交,由你标记它是好是坏,每次都把范围缩小一半。所以即使有几千个提交,它也只需几步就能找出罪魁祸首。

在终端在线编辑器中试试这些命令:浏览器里就有一个真正的 shell,无需安装任何东西。

git bisect 在一个好的提交和一个坏的提交之间对历史做二分查找,每一步都把可疑范围减半。

语法

命令作用
git bisect start开始一次二分查找
git bisect bad把当前提交标记为有问题
git bisect good <hash>标记一个确定正常的提交
git bisect good / git bisect bad标记每个测试过的提交
git bisect run ./test.sh自动化:每一步都运行测试来标记
git bisect reset结束二分查找,回到你的分支

完整示例

找出是哪个提交导致构建失败。

步骤命令结果
1git bisect start开始查找
2git bisect bad当前提交有问题
3git bisect good v1.0这个旧标签是正常的
4测试,然后执行 good/bad重复,直到 Git 指出是哪个提交

Git bisect 常见问题

git bisect 是做什么的?

它在你的提交历史中执行二分查找,找出引入 bug 的确切提交。你把一个提交标记为 good,另一个标记为 bad;Git 会反复检出中间的提交让你测试,每次把查找范围缩小一半,直到找出第一个有问题的提交。

git bisect 怎么用?
运行 git bisect start,用 git bisect bad 标记当前有问题的状态,再用 git bisect good <hash> 标记一个确定正常的提交。Git 会检出一个中间提交;测试它,然后运行 git bisect good 或 git bisect bad。重复这个过程,直到 Git 报告第一个有问题的提交,最后运行 git bisect reset。
git bisect 能自动化吗?
能。git bisect run <script> 会在每一步运行你的脚本:提交正常时脚本应以 0 退出,有问题时以非 0 退出(测试运行器很适合)。这样 Git 就会自动完成二分查找,不用你手动标记每个提交,最后打印出有问题的那个提交。
如何结束二分查找?
运行 git bisect reset 结束这次查找,回到开始之前所在的分支和提交。不管有没有找到有问题的提交都要这样做,它会清理二分查找留下的临时状态。
可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里真正的 shell 中运行 git bisect,无需安装任何东西。Coddy 免费的互动式 Git 课程也会一步步讲解如何查看历史。
Coddy 编程语言插图

在 Coddy 学习 Git

开始