使用 git bisect 命令查找错误

Git 的 bisect 工具通过快速识别错误的提交来节省时间和精力。
1 位读者喜欢这篇文章。
Bug tracking magnifying glass on computer screen

Pixabay, testbytes, CC0

你是否曾经在代码中发现一个错误,并且需要知道它最初是在什么时候引入的? 很可能,提交错误的人没有在他们的 Git 提交消息中声明它。 在某些情况下,它可能已经存在了数周、数月甚至数年,这意味着你需要搜索数百甚至数千个提交才能找到问题是在何时引入的。 这就是 git bisect 旨在解决的问题!

git bisect 命令是一个强大的工具,它可以快速检出一个已知良好状态和一个已知错误状态之间一半位置的提交,然后要求你将该提交标识为良好或错误。 然后它会重复此过程,直到你找到代码首次引入的确切提交。

Image of Zeno's paradox of Achilles.

(Martin Grandjean, CC BY-SA 4.0)

这个“数学魔法”工具通过利用对分的力量工作。 无论你需要经历多少步骤,通过查看中间点并决定它是提交列表的新顶部还是底部,你都可以在少数几个步骤中找到任何想要的提交。 即使你有 10,000 个提交要搜索,也最多只需要 13 个步骤即可找到第一个有问题的提交。

  1.  提交 1 错误 <> 提交 10,000 良好 => 提交 5,000 错误
  2.  提交 5,000 错误 <> 提交 10,000 良好 => 提交 7,500 良好
  3.  提交 5,000 错误 <> 提交 7,500 良好 => 提交 6,250 良好
  4.  提交 5,000 错误 <> 提交 6,250 良好 => 提交 5,625 错误
  5.  提交 5,625 错误 <> 提交 6,250 良好 => 提交 5,938 错误
  6.  提交 5,938 错误 <> 提交 6,250 良好 => 提交 6,094 良好
  7.  提交 5,938 错误 <> 提交 6,094 良好 => 提交 6,016 错误
  8.  提交 6,016 错误 <> 提交 6,094 良好 => 提交 6,055 良好
  9.  提交 6,016 错误 <> 提交 6,055 良好 => 提交 6,036 错误
  10.  提交 6036 错误 <> 提交 6055 良好 => 提交 6046 错误
  11.  提交 6,046 错误 <> 提交 6,055 良好 => 提交 6,050 错误
  12.  提交 6,050 错误 <> 提交 6,055 良好 => 提交 6,053 良好
  13.  提交 6,053 错误 <> 提交 6,055 良好 => 提交 6,054 良好

因此,在 10,000 个提交中,第一个错误的提交是提交编号 6,053。 使用 git bisect,这最多需要几分钟。 我甚至无法想象如果逐个提交地爬网调查,这将花费多长时间。

使用 Git bisect

使用 git bisect 命令非常简单直接

$ git bisect start
$ git bisect bad        # Git assumes you mean HEAD by default
$ git bisect good <ref> # specify a tag or commit ID for <ref>

Git 检出中间的提交,并等待你声明它是

$ git bisect good
## or
$ git bisect bad

然后,bisect 工具会重复检出好提交和坏提交之间一半位置的提交,直到你告诉它

$ git bisect reset

高级用户甚至可以编写脚本来确定良好和错误状态,以及在找到特定提交后要采取的任何补救措施。 你可能不会每天都使用 git bisect 命令,但是当你需要它时,它是一个救命稻草。

标签
Dwayne McDaniel
Dwayne McDaniel 是 GitGuardian 的开发者布道师 - 他自 2016 年以来一直担任开发者关系专业人士,自 2005 年以来一直参与更广泛的科技社区。他喜欢分享他的知识。 除了科技之外,还可以问他关于卡拉 OK、摇滚演出和即兴表演。

1 条评论

二分查找

© . All rights reserved.