Podczas korzystania z git bisect
, można uruchomić git bisect skip
, aby oznaczyć bieżące zatwierdzenie jako nieodtwarzalne/niesprawdzalne, aby spróbować przekonać Gita do wybrania innego zatwierdzenia do przetestowania.W jaki sposób git bisect pomija wybór następnego commitowania?
W jaki sposób Git decyduje, które zatwierdzenie wypróbować po git bisect skip
? Eksperymentowanie pokazuje, że nie jest to tylko sąsiednie zatwierdzenie, ale nie mogę opracować wzorca.
Edit: Jestem świadomy podstawowe git bisect
jest wyszukiwanie binarne, ale jestem ciekaw git bisect skip
, która jest wyraźnie robi coś bardziej skomplikowanego.
Eksperymentacja pokazuje, że nie jest to tylko wybór sąsiedniego zatwierdzenia; poniżej tworzy 100 zatwierdzeń o numerach 0 – 99, a następnie rozpoczyna ich dzielenie na dwie części. Pierwsze zatwierdzenia znajdują się w środku, ale każdy z nich wydaje się być mniej lub bardziej losowo wybrany.
$ 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
Czy przeczytałeś dokumentację? Mówię, że używa wyszukiwania binarnego. https://git-scm.com/docs/git-bisect – crashmstr
@crashmstr Czy? Nie jest to zbyt jasne na podstawie komendy * pominięcie *. –
@crashmstr: Wiem, że podstawowe użycie 'git bisect' jest wyszukiwaniem binarnym. Ale 'git bisect skip' nie może być po prostu binarnym wyszukiwaniem, ponieważ nie jest to binarne wyszukiwanie _does_. I tak, przejrzałem dokumentację, a nawet zacząłem próbować spojrzeć na kod źródłowy przed pytaniem tutaj, i nie mogę znaleźć nigdzie, co wyjaśnia, w jaki sposób wybiera się następny commit po "pomijaniu git bisect". –