Blog

Haltet eure Git-Commits sauber

MAR 22, 2021

Ohne die richtige Pflege kann eure Git-Historie schnell unübersichtlich werden. Gute Commit-Nachrichten sind wichtig, doch auch der tatsächliche Inhalt der Commits zählt. Hier findet ihr hilfreiche Richtlinien, um ihre Qualität zu verbessern.

Mads Jensen

Mads works as a consultant at Eficode in Denmark. He is passionate about automation and testing, and in general to get the most of the tools he uses. He occasionally contributes to open-source projects, in particular to the Django web framework. He likes riding his bike for both sport and transportation and enjoys watching movies.

Einführung

Eine saubere Commit-Historie ist wichtig. In unseren Git-Schulungen verweisen wir oft auf Chris Beams Leitfaden zum Schreiben von Commit-Nachrichten. Ebenso wichtig ist jedoch, was ihr tatsächlich in eure Commits aufnehmt. Im Folgenden findet ihr einige Richtlinien, mit denen ihr die Lesbarkeit von Commits und die Nachverfolgbarkeit von Änderungen verbessert sowie den Review-Prozess erleichtert, indem ihr Commits auf wesentliche Änderungen beschränkt.

1. Nur eine einzelne Änderung aufnehmen

Achtet beim Erstellen eines Commits darauf, dass er nur eine einzelne Änderung enthält und diese in der Commit-Nachricht klar beschrieben wird. So wird die Auswirkung eines Commits deutlich und Nebenwirkungen beim Zurücksetzen oder Mergen von Commits werden vermieden. Dies wird häufig als Erstellen eines atomaren Commits bezeichnet.

2. Auf einen Issue Tracker verweisen

Wenn ihr an einem Issue arbeitet, beschränkt eure Änderungen auf die Lösung genau dieses Issues. Denkt außerdem daran, die Issue-ID in eurer Commit-Nachricht anzugeben. So lassen sich Änderungen leichter auf ihr ursprüngliches Issue zurückführen, und es sinkt das Risiko, dass ein Fix etwas Unzusammenhängendes beschädigt.

3. Tests ohne Kontext separat halten

Wenn ihr Änderungen committet, fügt ihr wahrscheinlich Tests hinzu, um diese Änderungen zu prüfen. Als Faustregel gilt: Alle Tests, die auch ohne eure Änderungen erfolgreich durchlaufen, sollten separat committet werden. Mehr Testabdeckung ist immer willkommen, doch Regressionstests mit neuer Testabdeckung zu vermischen, widerspricht dem Prinzip des atomaren Git-Commits.

4. Code- und Stiländerungen nicht vermischen

Stiländerungen wie das Korrigieren von Einrückungen oder das Hinzufügen bzw. Entfernen von Leerzeichen am Zeilenende sind sinnvoll, erschweren jedoch das Review, da ihr mehr Zeilen als nötig verändert. Beachtet dabei Folgendes:

  • Wenn ihr Code bereinigt, indem ihr beispielsweise Imports neu organisiert oder nicht mehr verwendeten Code löscht, macht dies in separaten Commits.

  • Wenn euer Repository Dokumentation enthält, reduziert ein Zeilenumbruch beispielsweise nach 80 Zeichen den Diff in den geänderten Absätzen.

  • Fügt eurem CI-Torgate einen Linter hinzu, damit ihr künftig keine Stiländerungen vornehmen müsst.

  • Nutzt Tools, um einen konsistenten Stil beizubehalten. Black für Python kann beispielsweise Stilverstöße hervorheben.

Einige Editoren haben eigene Vorstellungen vom Stil und nehmen möglicherweise automatisch Stiländerungen vor. Das kann in großen Teams problematisch sein, in denen nicht alle denselben Editor verwenden. Erwägt den Einsatz von EditorConfig. Damit könnt ihr Regeln in einer YAML-Datei definieren, die dem Editor vorgeben, wie verschiedene Dateitypen formatiert werden sollen. Einstellungen für Zeilenumbrüche können zwar auch von Git verwaltet werden (siehe core.autocrlf), EditorConfig ist jedoch leistungsfähiger und ausdrucksstärker. Eine weitere Möglichkeit besteht darin, Richtlinien zur Konfiguration einer IDE bereitzustellen, damit sie den Code-Stil einhält.

5. Die Anzahl der Zeilen minimieren, die zukünftige Commits ändern werden.

In bestimmten Sprachen könnt ihr den Aufwand minimieren, den künftige Änderungen verursachen. Verwendet in Python nachgestellte Kommata in Dictionaries, damit beim Hinzufügen eines Elements im nächsten Commit nicht zwei Zeilen geändert werden müssen. In Haskell erreicht ihr dasselbe, indem ihr ein Komma am Zeilenanfang ergänzt.

Im folgenden Python-Beispiel wurde durch den neuen Eintrag nur eine statt zwei Zeilen geändert.

Hilfreiche Git-Tools

Falls euch diese Richtlinien in der Praxis umständlich erscheinen, keine Sorge. Git bietet einige Tools, mit denen ihr saubere atomare Commits erstellen könnt.

  • git add --patch oder git gui ermöglichen euch, interaktiv auszuwählen, welche Codeänderungen ihr stagen möchtet.

  • git commit --amend ermöglicht euch, euren letzten Commit zu überarbeiten, falls ihr einen Fehler gemacht habt.

  • git rebase -i ermöglicht euch, eure lokale Historie umzuschreiben, wenn ihr mehrere Commits bereinigen möchtet.

Fazit

Im Kern sollte ein Git-Commit eine atomare Änderung sein, die nur den Code, die Tests und die Dokumentation einer einzelnen Änderung enthält. Mit den oben genannten Richtlinien erstellt ihr saubere Commits, haltet eure Historie übersichtlich und erleichtert eure Review-Prozesse. Außerdem bieten die ursprünglichen Commits bei künftigen Änderungen an bestehenden Features einen hervorragenden Bezugspunkt oder eine Vorlage für die erforderlichen Arbeiten. Anfangs erfordert das vielleicht etwas Disziplin, doch der Nutzen rechtfertigt den Aufwand auf jeden Fall.

  • CI/CD

Subscribe to our newsletter