gpt4 book ai didi

git - 将 git 平分在祖先路径上

转载 作者:行者123 更新时间:2023-12-03 17:00:48 24 4
gpt4 key购买 nike

我有一个带有复杂的分支和 merge 树的存储库,我想使用 git bisect 来查找引入错误的时间。

我有一个好的提交和坏的提交来开始二等分,其中好的提交是坏提交的祖先。

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

目前我正在通过保留提交列表并使用 git rev-list --ancestry-path GOOD..BAD 手动进行二等分。并在中间选择一个提交。有没有办法用 git bisect 自动执行此操作?它是否有旗帜可以留在祖先的道路上?

首先在祖先路径中一分为二的推理

与正在搜索的错误相关的功能可能并非在所有分支中都存在,因此检查在那里无关紧要。不过,它们应该存在于祖先路径中。

一旦完成了对祖先路径的二等分,一个人可能会得到一个 merge 提交作为罪魁祸首,他们就会知道这个错误来自那个分支。这已经教会了人们很多关于这个错误的知识。

为了继续对引入 bug 的分支进行二等分,不需要单独测试每个提交(因为它们不一定具有出现 bug 所需的功能),但应该将每个提交与最后一个好的提交 merge 然后检查错误是否存在。然后可以查明特定的提交,当与好的提交 merge 时,会引入错误。

请注意,我已经多次执行此过程,它对我非常有用,我只是在寻找使其更方便的方法。

最佳答案

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

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

  • 除非你对你的存储库有特定的了解,以至于不在祖先路径上提交会产生误报或漏报,否则通常可以让 git rebase做它的事。由于它的行为是 O(log N),额外的成本往往可以忽略不计。但是,您可以使用 git bisect skip RANGE如果需要,指定要跳过的范围。

    如果您可以使用 shell 脚本或命令自动测试您的分支,您可以使用 git bisect run用那个shell脚本。如果提交是好的,它应该退出 0,如果应该跳过提交,则应该退出 125,如果提交是坏的,则应该退出 1 和 127 之间的任何其他代码。这可用于避免检查因任何原因不适合的提交。

    关于git - 将 git 平分在祖先路径上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61084631/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com