Quando si utilizza git bisect
, è possibile eseguire git bisect skip
per contrassegnare il commit corrente come non gestibile/non testabile, per provare a ottenere Git per selezionare altri commit da testare.In che modo git bisect salta scegliere il prossimo commit da provare?
In che modo Git decide quale commit provare dopo lo git bisect skip
? La sperimentazione mostra che non è solo un commit adiacente, ma non riesco a capire il modello.
Edit: Sono a conoscenza di base git bisect
è una ricerca binaria, ma io sono curioso di sapere git bisect skip
, che è chiaramente facendo qualcosa di più complicato.
La sperimentazione mostra che non si tratta solo di prelevare un commit adiacente; il sotto crea 100 commit numerati 0 – 99 quindi inizia a bisetterli. I primi commit git bisect
sono nel mezzo, ma ogni git bisect skip
sembra essere più o meno selezionato casualmente.
$ 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
Hai letto la documentazione? Dico che usa una ricerca binaria. https://git-scm.com/docs/git-bisect – crashmstr
@crashmstr Hai? Non è molto chiaro sul sottocomando * salta * effettivamente. –
@crashmstr: So che l'uso di base di 'git bisect' è una ricerca binaria. Ma 'git bisect skip' non può essere solo una ricerca binaria perché non è ciò che una ricerca binaria fa. E sì, ho navigato nella documentazione e ho anche iniziato a provare a guardare il codice sorgente prima di chiedere qui, e non riesco a trovare da nessuna parte che spiega come viene scelto il prossimo commit dopo un 'git bisect skip'. –