使用git bisect
时,可以运行git bisect skip
将当前提交标记为unbuildable / untestable,以尝试让Git选择其他提交来进行测试。
Git如何决定在git bisect skip
之后尝试哪个提交?试验表明,它不仅仅是一个相邻的提交,但我无法解决这种模式。
修改:我知道基本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
答案 0 :(得分:-7)
正如Git所建议的那样,简短的回答是:它不是你的业务。
git bisect
背后的想法是你指定了两个端点,Git认为它是一个提交,在它之间,它认为是减少测试次数的目标的有用的。
正如文档所说,这只是一个二进制搜索,但没有指定使用何种算法
然后git bisect在这两个端点之间选择一个提交
它可能不是一个简单的 pick-the-middle-commit 二进制搜索,Git可以使用它想要的任何决策算法,它明确地不希望你知道它以便你不会对将被提取的提交做出假设。
当涉及到更改提取的提交时,它为您提供了两种可能性:
git reset --hard
。 git bisect skip
做出新的选择。在后一种情况下,当您使用good
和bad
更新端点时,Git会以其想要的方式做出决定。
出于好奇,我制作了简单的单分支存储库并尝试了git bisect skip
命令
我的Git版本获得了之前的提交。