Lab 18: Git Bisect (Terminal)¶
Du kommst aus dem Urlaub zurück und stellst fest: Der master-Branch ist
kaputt. Der Build schlägt fehl, und es ist unklar, welcher von den vielen
Commits seit deiner Abwesenheit den Fehler eingeführt hat. Manuell jeden Commit
durchzugehen wäre viel zu aufwändig.
Genau für dieses Szenario gibt es git bisect. Der Befehl nutzt eine binäre
Suche (Binary Search) über die Commit-Historie: Du sagst Git, welcher Commit
definitiv gut war und welcher schlecht ist, und Git springt automatisch zum
Commit in der Mitte. Du testest, ob der Fehler dort vorhanden ist, und Git
halbiert den Suchbereich weiter - bis der exakte Commit gefunden ist, der den
Bug eingeführt hat.
Bei n Commits braucht die binäre Suche nur log₂(n) Schritte - bei 1000 Commits also nur etwa 10 Tests statt 1000.
Vorbereitung¶
Öffne das Terminal im Verzeichnis labs/18-bisect/exercise.
Aufgaben¶
Manuelles Bisect¶
- Starte den Bisect-Vorgang:
git bisect start
- Der aktuelle Stand (
HEAD) ist fehlerhaft. Markiere ihn als schlecht:
git bisect bad
- Glücklicherweise gibt es den Tag
initial-commit, der den Projekstart markiert und garantiert funktioniert hat. Markiere ihn als gut:
git bisect good initial-commit
- Git checkt jetzt automatisch den Commit in der Mitte aus. Teste, ob der Fehler hier vorhanden ist, indem du das Testskript ausführst:
Bash/macOS/Linux:
./test.sh
PowerShell/Windows:
pwsh -File test.ps1
Markiere das Ergebnis mit git bisect good oder git bisect bad und
wiederhole, bis Git den fehlerhaften Commit gefunden hat.
Automatisches Bisect¶
Du kannst den gesamten Vorgang auch automatisieren, wenn du ein Testskript hast, das mit Exit-Code 0 (Erfolg) oder einem Fehler-Code endet:
Bash/macOS/Linux:
git bisect start
git bisect bad
git bisect good initial-commit
git bisect run ./test.sh
PowerShell/Windows:
git bisect start
git bisect bad
git bisect good initial-commit
git bisect run pwsh -File test.ps1
Git führt die binäre Suche dann vollautomatisch durch und gibt am Ende den Commit aus, der den Fehler eingeführt hat.
Aufräumen¶
- Beende den Bisect-Vorgang:
git bisect reset
Damit kehrst du zum ursprünglichen Branch zurück.
Tipp:
git bisectist eines der mächtigsten Debugging-Werkzeuge in Git und besonders effektiv, wenn du gute automatische Tests hast. Es funktioniert sogar bei Tausenden von Commits in wenigen Sekunden.
Nützliche Befehle¶
| Befehl | Beschreibung |
|---|---|
git bisect start |
Bisect-Vorgang starten |
git bisect bad |
Aktuellen Commit als fehlerhaft markieren |
git bisect good <ref> |
Einen Commit als funktionierend markieren |
git bisect run <script> |
Automatische Suche mit Testskript |
git bisect reset |
Bisect beenden und zurückkehren |
git bisect log |
Bisheriges Bisect-Protokoll anzeigen |