#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二分法功能

 评论