【发布时间】:2016-07-29 14:51:27
【问题描述】:
使用git bisect 时,可以运行git bisect skip 将当前提交标记为不可构建/不可测试的提交,以尝试让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
【问题讨论】:
-
您阅读文档了吗?我说它使用二进制搜索。 git-scm.com/docs/git-bisect
-
@crashmstr 是吗?子命令 skip 确实不是很清楚。
-
@crashmstr:我知道
git bisect的基本用法是二分搜索。但是git bisect skip不能只是二分搜索,因为这不是二分搜索所做的。是的,我已经浏览了文档,甚至开始尝试查看源代码,然后再在这里提问,但我找不到任何地方解释如何选择git bisect skip之后的下一次提交。 -
请注意,由于合并提交,
git bisect做了一些非常神奇的事情无论如何。
标签: git git-bisect