git bisect
Den Commit finden, der einen Fehler eingeführt hat, per binärer Suche
Der Befehl 'git bisect' findet den Commit, der einen Fehler eingeführt hat. Du markierst einen Commit als schlecht (bad, hat den Fehler) und einen als gut (good, hat ihn nicht); git checkt den Commit in der Mitte aus, du testest ihn und antwortest good oder bad, und git halbiert die Verdächtigen erneut, bis nur einer übrig ist. Selbst tausend Commits brauchen nur etwa zehn Tests. git bisect reset bringt dich zurück an den Ausgangspunkt.
Syntax
git bisect start [<bad> [<good>...]]
git bisect (bad | good) [<rev>...]
git bisect skip [<rev>...]
git bisect reset
git bisect log
git bisect run <cmd>...Optionen
Die richtige Option wählen
Nötige Tests
Die Binärsuche halbiert die Verdächtigen jedes Mal
| Befehl | bisect-Tests |
|---|---|
10 commits | etwa 4 |
100 commits | etwa 7 |
1000 commits | etwa 10 |
Beispiele
Eine Sitzung starten
git bisect startBeginnt die Suche.
Commits markieren
git bisect bad && git bisect good v1.0Der aktuelle Commit ist schlecht, v1.0 war gut.
Automatisieren
git bisect run npm testLass ein Testskript für dich antworten.
Abschließen
git bisect resetZurück auf deinen Branch.
Workflow-Beispiele
git bisect start HEAD v1.0Jetzt schlecht, in v1.0 gut
git bisect good / git bisect badJeden Commit testen, den git auscheckt
git bisect resetZurück auf deinen Branch
git revert <first-bad>Den Schuldigen rückgängig machen
Fehlerbehebung
You need to start by "git bisect start"
Ursache: Keine Sitzung läuft
Führe zuerst git bisect start aus
Falsche Antwort gegeben
Ursache: Alle späteren Schritte bauen darauf auf
git bisect log > log.txt, Zeile korrigieren, git bisect reset, git bisect replay log.txt
Tipps & Stolperfallen
Best Practices
- ✓Schreibe einen automatischen Test und nutze git bisect run.
- ✓Beende immer mit git bisect reset.
Häufige Fehler
- ✗Einmal falsch antworten — dann sind alle späteren Schritte falsch (prüfe mit git bisect log).
- ✗git bisect reset vergessen und auf einem losgelösten HEAD weiterarbeiten.
- ✗Mit nicht committeten Änderungen starten, die beim Auschecken stören.
FAQ
Ja: git bisect start --term-old=fast --term-new=slow, z. B. um herauszufinden, wann etwas langsam wurde.