Suche…


Syntax

  • git bisect <subcommand> <options>

  • git bisect start <bad> [<good>...]

  • git bisect reset

  • git bisect good

  • git bisect bad

Binäre Suche (git bisect)

git bisect können Sie anhand einer binären Suche herausfinden, welches Commit einen Fehler eingeführt hat.

Beginnen Sie mit der Halbierung einer Sitzung, indem Sie zwei Commit-Referenzen angeben: ein gutes Commit vor dem Fehler und ein schlechtes Commit nach dem Fehler. Im Allgemeinen ist das schlechte Commit HEAD .

# start the git bisect session
$ git bisect start

# give a commit where the bug doesn't exist
$ git bisect good 49c747d

# give a commit where the bug exist
$ git bisect bad HEAD

git startet eine binäre Suche: Die Revision wird in zwei Hälften geteilt und das Repository auf die Zwischenversion umgestellt. Überprüfen Sie den Code, um festzustellen, ob die Revision gut oder schlecht ist:

# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good

# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad

git wird die binäre Suche nach jeder noch verbleibenden Teilmenge der fehlerhaften Revisionen fortsetzen, je nach Ihren Anweisungen. git wird eine einzelne Revision präsentieren, die, sofern Ihre Flags nicht korrekt waren, genau die Revision darstellt, in der der Fehler eingeführt wurde.

git bisect reset anschließend daran, git bisect reset auszuführen, git bisect reset die halbierte Sitzung zu beenden und zu HEAD zurückzukehren.

$ git bisect reset

Wenn Sie ein Skript haben, das nach dem Fehler suchen kann, können Sie den Prozess mit folgendem automatisieren:

$ git bisect run [script] [arguments]

Dabei ist [script] der Pfad zu Ihrem Skript und [arguments] Argumente, die an Ihr Skript übergeben werden sollen.

Wenn Sie diesen Befehl ausführen, wird automatisch die binäre Suche ausgeführt. In jedem Schritt werden git bisect good oder git bisect bad abhängig vom Exit-Code Ihres Skripts. Das Beenden mit 0 zeigt good , das Beenden mit 1-124, 126 oder 127 zeigt schlecht an. 125 gibt an, dass das Skript diese Version nicht testen kann (was einen git bisect skip auslöst).

Halbautomatisch finden Sie ein fehlerhaftes Commit

Stellen Sie sich vor, Sie befinden sich im master Zweig und etwas funktioniert nicht wie erwartet (eine Regression wurde eingeführt), aber Sie wissen nicht, wo. Alles, was Sie wissen, ist, dass in der letzten Version gearbeitet wurde (was z. B. mit einem Tag versehen wurde oder Sie kennen den Commit-Hash, nehmen wir hier old-rel ).

Git hat Hilfe für Sie, um das fehlerhafte Commit zu finden, das die Regression mit einer sehr geringen Anzahl von Schritten einleitete (binäre Suche).

Beginnen Sie zunächst mit der Halbierung:

git bisect start master old-rel

Dies sagt git, dass master eine defekte Version ist (oder die erste defekte Version) und old-rel die letzte bekannte Version ist.

Git wird nun einen losgelösten Kopf in der Mitte beider Commits auschecken. Jetzt können Sie Ihre Tests durchführen. Abhängig davon, ob es funktioniert oder nicht

git bisect good

oder

git bisect bad

. Falls dieses Commit nicht getestet werden kann, können Sie es einfach git reset und testen. Git kümmert sich darum.

Nach wenigen Schritten gibt git den fehlerhaften Commit-Hash aus.

Um den zweigeteilten Vorgang abzubrechen, wird nur noch ausgegeben

git bisect reset

und git stellt den vorherigen Zustand wieder her.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow