Git Bisect 提交列表

Posted

技术标签:

【中文标题】Git Bisect 提交列表【英文标题】:Git Bisect List of Commits 【发布时间】:2020-08-23 10:07:16 【问题描述】:

我试图避免在这里编写我自己的 bisect 工具,但我想我会先在这里检查一下。

基本上,我只想平分git log --merges 中列出的提交(即我想弄清楚哪个 PR 引入了问题)。但是,git bisect 似乎使用 all 提交,而不仅仅是 PR 合并提交。这是有问题的,因为测试提交是好是坏对于除了 PR 合并提交(预先构建在工件中)之外的任何东西都是极其繁重的。

按照here 的建议使用git skip 剔除非合并提交是次优的,而不是真正的合并提交的二进制搜索。例如,我使用了git skip 方法,这是二等分采用的路径(这是合并提交的列表,星号是问题合并提交,数字是二等分采用的路径):

  6e473285b96b62d6f4d95b36b23099f1ac55bdc9
  7ef96ab33ca8ca1b0a936d3cb40afec69637b289
* fa56ec958635e1e4db655e7768597ebefb475627 4 
  7a2e6c2087d58403f0801178f58ee8478f8e575b 5 DONE, bad merge commit is fa56ec9
  a86c9e98f94a4c619ef2b0a987886c02397d8eda 3 
  466469d32acf50769dc2db8bb97ce898e07a1018
  fb9c84883b726e733631f7b46fa0074e7a685ffc
  dd5d343188a27848d7e563b458cdef4bb295e321 2
  918d903a543402e6acc9eba9d5f38f1ebff6329d
  dfffce27f96415189775286adfd4222aba72e761
  07ceb2ba9620bbf4360b9b461c587ed2d18ccabb
  31813de9c7efb6765a18657f235379d1049fbbea
  460a2f8061e4d1b1d6faf81e0f8b3e1af011f096 1 <-- bisect starting at sub-optimal commit because of git skip
  93d5da46d01f180c8b4d36c8b302bf0763a79955
  fd01fd2381ec47954fc37488df9fbe773e9cf68a
  2cf6e83fc63d95c5ab50a4c23be12188b2983910
  b7bd87fde16d9905b4d368a605b7678184577b0e
  6e473285b96b62d6f4d95b36b23099f1ac55bdc9
  7ef96ab33ca8ca1b0a936d3cb40afec69637b289
* fa56ec958635e1e4db655e7768597ebefb475627 3
  7a2e6c2087d58403f0801178f58ee8478f8e575b 4 DONE
  a86c9e98f94a4c619ef2b0a987886c02397d8eda 2
  466469d32acf50769dc2db8bb97ce898e07a1018
  fb9c84883b726e733631f7b46fa0074e7a685ffc
  dd5d343188a27848d7e563b458cdef4bb295e321
  918d903a543402e6acc9eba9d5f38f1ebff6329d 1 <-- optimal starting commit
  dfffce27f96415189775286adfd4222aba72e761
  07ceb2ba9620bbf4360b9b461c587ed2d18ccabb
  31813de9c7efb6765a18657f235379d1049fbbea
  460a2f8061e4d1b1d6faf81e0f8b3e1af011f096
  93d5da46d01f180c8b4d36c8b302bf0763a79955
  fd01fd2381ec47954fc37488df9fbe773e9cf68a
  2cf6e83fc63d95c5ab50a4c23be12188b2983910
  b7bd87fde16d9905b4d368a605b7678184577b0e

我可以生成一个我想用git log --merges 平分的提交列表,但是是否有可能以某种方式将此列表提供给git bisect,以便它可以最佳地平分或者我不走运?

【问题讨论】:

bisect 需要检查(并尊重)图拓扑。您已将此处的提交线性化,但未显示底层拓扑,因此尚不清楚 Git 的测试是否 次优,但我认为您的问题的简短回答是“不,你不能这样做那”。我会让它打开一段时间,看看是否有人知道你可以做到这一点的方法。 【参考方案1】:

不,Git 不提供仅将合并提交一分为二的选项。 git bisect 旨在找到有问题的实际提交,而不仅仅是一组中的一个。因此,它不允许您仅搜索合并。单个合并可能会引入数百个可能导致问题的潜在相关更改(想想 Linux 内核),因此在许多情况下,确定单个合并并不能告诉您太多信息。

在这种情况下,唯一的缺点是您必须再搜索一次提交,这总体上并不那么痛苦。使用您使用的方法或退出 125 的脚本来跳过与 git bisect run 一起使用的非合并提交是在这种情况下您可以做的最好的事情,我个人不会考虑缺点(少量额外的迭代)太糟糕了,值得编写自己的工具。

【讨论】:

以上是关于Git Bisect 提交列表的主要内容,如果未能解决你的问题,请参考以下文章

做一个 git bisect 并且其中一个提交没有建立

查找问题的利器 - Git Bisect

让 Git Bisect 帮助你

git bisect 如何选择一个没有第一个好的提交作为祖先的提交? (使用--first-parent)

git bisect 并找到最后一个好的提交 - 我错过了啥吗?

为啥 git bisect 为我提供了一个相当古老的提交?