情况

情况

情况

git bisect非常适合定位引入错误的提交。您只需要知道一个不存在错误的好提交、一个存在错误的(较新的)坏提交,以及一种测试任何给定提交中是否存在错误的方法。然后git bisect引导您进行二分搜索。

问题

我感兴趣的是知道一个好的提交。我假设过去有一个,但我就是记不住。手动查找它是一项巨大的体力劳动,我想避免。

git bisect我可以以不需要指定良好提交的方式运行吗?它能帮我找到一个好的提交吗?

我很惊讶这个问题并不为人所知。我每个月都会遇到它。

几乎不可用的方法

一种方法可能是获取存储库的第一次提交并将其标记为好。但这有很多问题。

  • 可能没有单一的第一次提交。有时选择并不容易。
  • 测试错误的方法可能不适用于第一次提交,也不适用于随后的许多早期提交。原因很简单,因为测试无法编译、运行或与代码兼容。我可以git bisect skip这样做,但是目前还不清楚会选择哪个提交
  • 存储库可能非常大。例如,数十万次提交。如果我没有办法有效地跳过许多无法使用的提交,就无法遍历所有的提交。

提案:指数搜索

此类问题的标准解决方案是指数搜索。通过转到HEAD~1,然后HEAD~2HEAD~4HEAD~8依此类推,直到遇到一个好的提交,就可以找到好的提交。这也可以在对数时间内完成,并且比回溯所有历史记录要好得多,因为我们从我们的测试方法可能适用的提交开始。

是否实施指数搜索git bisect?是否有辅助脚本可以做到这一点?您如何解决这个问题?

相关内容