Bei der Verwendung von git bisect
kann git bisect skip
ausgeführt werden, um das aktuelle Commit als unbuildbar/nicht testbar zu kennzeichnen, um zu versuchen, Git dazu zu bringen, ein anderes Commit zum Testen auszuwählen.Wie wählt git bisect überspringen den nächsten Commit aus?
Wie entscheidet Git, welche sich nach einem git bisect skip
versuchen? Das Experimentieren zeigt, dass es nicht nur ein angrenzendes Commit ist, aber ich kann das Muster nicht ausarbeiten.
bearbeiten: Ich bin der Grund git bisect
bewusst eine binäre Suche, aber ich bin neugierig auf git bisect skip
, die eindeutig etwas komplizierter zu tun ist.
Experimentieren zeigt, dass es nicht nur ein angrenzendes Commit wählt; die unten erstellt 100 commits nummeriert 0 – 99 dann beginnt, sie zu teilen. Der erste Commit git bisect
liegt in der Mitte, aber jeder git bisect skip
scheint danach mehr oder weniger zufällig ausgewählt zu sein.
$ 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
Haben Sie die Dokumentation gelesen? Ich sage, dass es eine binäre Suche verwendet. https://git-scm.com/docs/git-bisect – crashmstr
@crashmstr Hast du? Es ist nicht sehr klar auf den Unterbefehl * skip * in der Tat. –
@crashmstr: Ich weiß, dass die grundlegende Verwendung von 'git bisect' eine binäre Suche ist. Aber "git bisect skip" kann nicht nur eine binäre Suche sein, weil das nicht eine binäre Suche ist _does_. Und ja, ich habe die Dokumentation durchforstet und habe sogar angefangen, den Quellcode zu betrachten, bevor ich hier nachfragte, und ich kann nirgends finden, dass es erklärt, wie der nächste Commit nach einem 'git bisect skip' gewählt wird. –