使用 git bisect
时,可以运行 git bisect skip
将当前的提交标记为无法构建/无法测试的提交,以尝试让 Git 选择其他提交来代替测试。
在 git bisect skip
后,Git 如何决定要尝试哪个提交呢?实验表明,它不仅是一个相邻的提交,但我无法确定其模式。
编辑:我知道基本的 git bisect
是二分搜索,但我想知道的是 git bisect skip
,它显然做了一些更复杂的事情。
实验表明,它不仅是选择相邻的提交;下面创建了 100 个提交,编号为 0-99,然后开始对它们进行二分搜索。第一个 git bisect
选择的提交位于中间,但此后的每个 git bisect skip
看起来都是随机选择的。
$ git init
Initialized empty Git repository in .git/
$ for (( i=0; i<100; i++ )); do echo $i > file; git add file; git commit -m $i >/dev/null; done # Create some dummy commits
$ git bisect start HEAD $(git rev-list --max-parents=0 HEAD) # HEAD is bad, root commit is good.
Bisecting: 49 revisions left to test after this (roughly 6 steps)
[099e5cf2ccde625f92dc369da6cad0bdf2852ce4] 49
$ git bisect skip
Bisecting: 49 revisions left to test after this (roughly 6 steps)
[88c8208a7c4322222124167e49f07c741af7d3d8] 60
$ git bisect skip
Bisecting: 49 revisions left to test after this (roughly 6 steps)
[04695f2e5b2473c3ac72435c0dbfc3ba1375abda] 88
$ git bisect skip
Bisecting: 49 revisions left to test after this (roughly 6 steps)
[1e9bf3d29589bcac2d8c467245ae8d446c195252] 40
$ git bisect skip
Bisecting: 49 revisions left to test after this (roughly 6 steps)
[9459ed79e4112d674681c8f0f921127217c7ebc6] 13
git bisect
的基本用法是二分查找。但git bisect skip
不能仅仅是二分查找,因为这不是二分查找的作用。我已经查看了文档并尝试查看源代码,但是在问这里之前找不到任何解释git bisect skip
之后如何选择下一个提交的地方。 - me_andgit bisect
会执行一些相当神奇的操作。 - o11c