我有一个代码库,使用了“主干”流程和功能分支合并的方式,并创建合并提交,我正在使用二分查找尝试查找问题引入的时间。问题识别过程涉及与已知良好提交结果的比较,因此我使用
然而,
在下面的示例中,提交
没有使用
我已经在一个小型存储库上进行了测试,它的表现符合我的预期,然而在我更大、更复杂的存储库中,没有跳过那些不具有
我的命令如下:
git bisect --first-parent
(在2.29中发布)跳过不在“主干”分支中的提交(对于我来说,确定引起问题的合并提交已足够)。然而,
git bisect --first-parent
会选取没有我的第一个良好提交作为祖先的提交,我不确定这是如何可能的。在下面的示例中,提交
2
是好的,而提交 4
是坏的。 a
/ \
1-2-3-4
没有使用
--first-parent
参数时,我预期特性分支提交 a
会被包含在二分查找中,然而使用了 --first-parent
参数后,我预期它将跳过该提交,并且仅测试合并提交 3
。我已经在一个小型存储库上进行了测试,它的表现符合我的预期,然而在我更大、更复杂的存储库中,没有跳过那些不具有
first-good
祖先的提交,我很难理解为什么会这样。我的命令如下:
# both "first-good" and "first-bad" are tags on the "trunk" branch
git bisect start --first-parent
git merge-base --is-ancestor first-good first-bad # returns TRUE
git merge-base first-good first-bad # returns first-good
git checkout first-bad
git bisect bad
git checkout first-good
git bisect good
git merge-base --is-ancestor first-good HEAD # returns FALSE - why/how?
git merge-base first-good HEAD # returns some other commit - why/how?