在祖先路径上保持git bisect

问题描述 投票:2回答:1

我有一个带有复杂的分支和合并树的存储库,并且我想使用git bisect查找何时引入了错误。

我有一个好的承诺和不好的承诺来开始二等分,而好的承诺是坏承诺的祖先。

我希望git bisect转到具有良好提交作为祖先的提交,但是没有(使用git 2.21.0)。

当前,我通过保存提交列表并使用git rev-list --ancestry-path GOOD..BAD并在中间选择一个提交来手动进行等分。有没有办法用git bisect自动执行此操作?它是否有留在祖先路径中的标志?

git git-bisect
1个回答
0
投票

git bisect没有选择遵循祖先路径的选项。通常,由于以下几个原因,这样的选项并不有用:

  • [通常,用户不确定回归的引入位置。因此,不太可能使用用于控制路径遍历的复杂选项。
  • [在大多数情况下,您将忽略大量可能的分支,因为您将跳过它们。如果您有1024个单独的分支,并且一个提交已合并到master分支中,则git bisect会忽略掉一半,甚至在第一次测试后就不会考虑,并且仍然只需要运行十二次就可以找到有问题的提交。
  • 通常,有问题的提交位于合并分支上,而不位于祖先路径上。对于大多数您没有线性历史记录的情况(即基于合并的工作流),这是正确的。

除非您具有关于存储库的特定知识,否则不在祖先路径上的提交将产生假阳性或假阴性,通常只允许git rebase执行其操作即可。由于其行为是O(log N),因此额外的费用往往可以忽略不计。但是,可以根据需要使用git bisect skip RANGE指定要跳过的范围。

© www.soinside.com 2019 - 2024. All rights reserved.