#git bisect二分法的王炸 ##前言
- 我们在研发过程中,经常会碰到很多疑难杂症。有时候这些疑难杂症,你都不知道是什么时候发生,什么原因引起的。当这些问题出现的时候,尤其如果在发版前碰到,所有人都要无头苍蝇一样抓狂。
- 但是,问题也还是要定位要解决的,一行行看代码肯定不合适。所以如果有了git bisect二分法,我们其实可以很轻松地定位到出现该问题的某一次提交。这样可以大大缩小我们排查问题的范围和时间。
##原理
- 其实git bisect的玩法也很简单。git提交其实是线性蜘蛛网状进行排列的,如果我们自己手动去线性排列,其实非常困难。所以git的研发人员为我们提供了bisect的方法。
- git bisect其实就是通过二分法进行罗列提交,帮助你通过二分法的方案进行回溯问题。
- 简单说就是:
- 当我们有一个线上问题不知道什么时候触发时,假定该问题出现在1.5版本。
- 而我们发现1.3版本还没有出现过此类问题,那么问题引入要么就是1.4,要么就是1.5了。
- 接下来我们可以定位到1.3最后发版的分支的最后一次提交。
- 因为1.3没有出现过问题,因此1.3的最后一次提交肯定是完好的。
- 因为1.5出现问题,因此1.5的最后一次提交肯定是有问题的。
- 接下来我们将好的、坏的两次提交交给git bisect帮我们进行回溯,通过几次的二分查找,我们肯定能定位出一个出现问题的提交来。
##常用命令
- git bisect 的常用命令有以下这些:
命令 | 作用 |
---|---|
git bisect start | 告诉git我准备要开始使用bisect二分法的功能了 |
git bisect good | 告诉git当前HEAD提交是一次good提交,没有target问题 |
git bisect bad | 告诉git当前HEAD提价试一次bad提交,出现了target问题 |
git bisect reset | 退出bisect二分法功能 |