这是我为了赞美git bisect
而编写的一个小实用程序。 git bisect
是一个很棒的工具。在最基本的用法中,您给它一个“好”提交(尚未包含某些属性的提交)和至少一个“坏”提交(包含某些属性的提交)。然后git bisect
将引导您完成搜索,选择提交进行测试,从而将搜索空间减少一半。这使您可以有效地识别具有特定功能的第一次提交。
然而git bisect
的前提之一是你知道一个好的提交。很多时候,您会注意到一个错误,但还不知道一个好的版本。上一个版本中这个功能被破坏了吗?还是新的?也许在过去的几个版本中它被忽视了?当然,您可以开始检查各种修订版以查看是否存在错误,但为什么要手动执行此操作呢?
这就是git bitsect-find
发挥作用的地方。它只需要一个错误的提交,然后后退一步寻找第一个好的提交。基本用法如下:
基本用法
首先检查你的错误提交:
$ git checkout main
然后开始使用git bisect-find bad
进行二等分。
系统会要求您开始常规git bisect
运行,输入 y。
然后将签出新的候选提交。如果候选提交错误,请运行git bisect-find bad
并检查新的候选。重复测试和标记过程,直到找到好的提交。
一旦你找到了一个好的提交,你就完成了git bisect-find
。只需运行git bisect good
并继续常规的二分过程即可。
更多的
README 中有更完整的文档。还有更多功能需要添加(例如自动二分)。然而,这些基础知识对我来说已经非常有用,所以我想我会分享。
机制
它的工作方式确实没有什么特别之处。它每次只是向后跳两倍远(跟随第一个父母)。所有状态都通过常规git bisect
记录,因此一旦找到良好的提交,所有git bisect-find bad
(和git bisect-find skip
)命令都会被记住为常规git bisect bad
和git bisect skip
。
我确实想知道向后跳两倍是否是最佳选择。显然,直接跳转到第一个提交会减少git bisect-find
步骤的数量。但会导致更多git bisect
。但git bisect
非常有效。 (更不用说第一次提交可能不是特别有趣。)在某些时候,我可能应该计算出哪种增长模式会导致总步骤数最短。但是我认为最佳数量还取决于目标提交年龄的分布。但无论哪种方式加倍效果都足够好,这个工具对我来说非常有帮助。