Oft genug habe ich diese Situation erlebt: Ich habe ein paar Änderungen am Code vorgenommen und ab und an einen kleinen Commit dazwischen geschoben. Nach etlichen weiteren lasse ich mal wieder die Integrationstests laufen - und siehe da, ein Fehler hat sich eingeschlichen.
Gut: Das lässt sich finden. Dazu muss ich muss nur die Commits durchgehen. Das kann aber sehr mühselig sein, zumal diese manuelle Vorgehensweise langsam und fehleranfällig ist.
Zur Abhilfe gibt es git bisect. Das übernimmt die Arbeit für mich. Git bisect wird direkt mit git ausgeliefert. Einige git-Tools haben es auch direkt integriert (z.B. Fork). Hier will ich kurz zeigen, wie bequem das in IntelliJ geht. Dafür wird das kleine Plugin git bisect run benötigt.
Ein Unit-Test misslingt. Wir müssen nun nur irgendwie herausfinden, welcher.
Entsprechenden Test mit git bisect über das Kontextmenü auswählen und laufen lassen.
Im Dialog muss ich nun eintragen, bei welchem Commit der Test fehlschlägt und bei welchem es noch funktioniert hat.

Als "Bad revision" trage ich meinen aktuellen Branch ein (HEAD-commit)

Um die "Good revision" zu finden, muss ich ein bisschen suchen. In diesem Fall glaube ich, dass der Commit von vor ca. einer Woche noch okay war.
Die Prüfsumme (SHA1) des Commits noch kopieren und im Bisect-Dialog eintragen. Dann starten!
Bisect läuft nun. Das kann ein bisschen dauern: Eine binäre Suche geht über alle Commits und führt den Test aus. Anhand dessen Ergebnis (Fehlschlag/Erfolg) sucht git bisect den fehlerhaften Commit.
Das Plugin zeigt mir auch den aktuellen Fortschritt an und wie lange es wohl noch braucht.
Nach etwas Zeit (bei mir zum Glück nur ein paar Minuten) präsentiert mir git bisect das Ergebnis: Der Übeltäter bin ich (wer sonst). Ich kann nun via "Show in Git log" zum Commit wechseln und mir diesen ansehen. (Den Bisect-Vorgang beende ich mit Reset.)
Im Git-Log in IntelliJ sehe ich direkt, was im Commit geändert wurde. Ab jetzt muss ich selbst nachdenken.
Du bist Softwareentwickler:in? Und suchst nach einem agilen und dynamischen Team? Hier geht's zu unserer Jobbörse.
zu Software und Agilität