场景
当线上有 bug 需要排查 bug 时,要最终定位到是哪个类的哪几行代码造成的这个 bug,此时就需要去看到底是哪一次提交的,是谁对这几行代码的修改造成了这次线上 bug,需要去定位责任人,发生时间等。
如果是比较严重的 case,比如导致用户无法支付,给公司造成了500万的经济损失,这肯定是要追查谁是责任人的。
命令
#开始二分查找
git bisect start
#标注当前这个commit是有bug的
git bisect bad
#标注commit为xxx的是有bug的commit
git bisect bad commitID
#标注commit为xxx的是没有bug的commit
git bisect good commitID
#退出二分查找
git bisect reset
实战
开始二分查找
git bisect start
告诉 git 当前的 commit 是有 bug 的,是一个 bad commit
git bisect bad
然后告诉 git,commitID 为 76714e7
的此次 commit 是没问题的。
于是 git 找到了 2 个可能有 bug 的版本,定位到的中间版本是 87058de
,对 87058de
的 commi 进行单测,发现了 bug,再次输入 git bisect bad
,没有其他节点了,中间版本是 4da3690
,测试此次的 commit 结果为 good,于是找到了首次出现 bug 的 commit。