Der Commit ist viel mehr als nur eine Remote-Version des Speicherdialogs im Versionskontrollsystem – zumindest mit durchdachten Commit-Nachrichten. Conventional Commits versucht, mit einer Konvention den richtigen Weg zu ebnen.
Gewisse Konventionen helfen dabei, bei Änderungen eine gewisse Übersicht im Versionskontrollsystem zu behalten.
Nicht selten lauten Commit-Nachrichten in Git „typos“, „small changes“, „added new foobar feature“ und so weiter – kurze, lieblose Wortfetzen, die wohl eher als Last denn als Chance begriffen werden. Doch selbst wenn sich Nutzer Mühe geben und aussagekräftige Nachrichten hinterlassen, dürfte das Ergebnis weit entfernt von jeglicher Konsistenz sein. In der Praxis gibt es dann häufig einfach interne Vorgaben, wie die Mitteilungen in etwa aussehen sollten.
Die Conventional-Commits-Richtlinen sorgen dafür, dass Commit-Nachrichten einheitlich, verständlich und nützlich sind – und so lassen sich automatisch aussagekräftige Changelogs erstellen! Solche Messages machen es einfacher, den Fortschritt von Projekten nachzuvollziehen, was sowohl für Kollegen als auch interessierte Neueinsteiger wertvoll ist.
Die Möglichkeiten gehen aber noch über die Verständlichkeit hinaus: Standardisierte Schlagwörter in Commit-Nachrichten könnten freilich auch genutzt werden, um weitere Skripte anzutriggern, beispielsweise zum Anstoßen von CI-Pipelines. Im Folgenden stellen wir Ihnen die Conventional-Commits-Konvention im Detail vor und zeigen, wie Sie deren Einhaltung automatisiert über den Befehl „git commit“ verifizieren können.
Conventional Commits
Die Konvention ist extrem simpel gehalten und sieht grundsätzlich so aus:
Die Commit-Nachrichten sollen also mit einer zwingenden ersten Zeile beginnen, die den Typ des Commits (etwa feat für eine neue Funktion) angibt, dazu eine kurze Beschreibung und optional einen Scope (zum Beispiel gui). Beispiel:
feat(gui): Neue Icons eingefügt
Welche Typen Sie nutzen, liegt dabei ganz bei Ihnen – feat und fix sind zwar Standards, die wohl in fast jedem Kontext sinnvoll sind; aber letztlich sagt die Konvention nur, dass und wie ein Typ angegeben werden muss, aber nicht, um welche Typen es sich handeln soll oder gar muss.
Der optionale Body wird schlicht durch eine Leerzeile abgetrennt und kann beliebig gestaltet werden. Natürlich mit dem Ziel, den Commit ausführlich zu beschreiben – oder auch, um Issues und dergleichen zu adressieren:
Neue Icons für das Dark-Theme aus dem freien Icon-Paket foobar hinzugefügt. Die Icons liegen unter „/assets/images/icons“ und dürfen gemäß Lizenz bearbeitet werden. Resultat aus ISSUE-123 und JIRA-ABC.
Der Footer ist ebenfalls optional, wobei auch mehrer Footer erlaubt sind. Diese werden vom Body wiederum per Leerzeile abtegrennt und folgen dem Muster „Schlagwort: text“ (inspiriert durch die Git Trailer Conventions):
Mocked-about-by: Peter BREAKING CHANGE: Neues Nutzer-Interface
Üblicherweise müssen Footer-Schlagwörter ohne Leerzeichen auskommen, „BREAKING CHANGES“ ist die Ausnahme: An dieser Stelle sollen große Änderungen kurz angefeatured werden, die auch in den automatisch generierten Changelogs in der Art auftauchen – unter einer eigenen Überschrift.
Im Grunde ist das bereits die ganze Konvention, der Rest sind Kleinigkeiten. Beispielsweise gibt es eine zweite Möglichkeit, „Breaking Changes“ zu kennzeichnen – nämlich direkt im Header:
feat(gui)!: Neue Icons eingefügt
Hier ist lediglich das Ausrufungszeichen hinzugekommen, das eben solche Breaking Changes impliziert. Ist ein solches Ausrufungszeichen gesetzt, kann auf die Kennzeichnung im Footer verzichtet werden.
Wenn Sie des öfteren Konventionen, Standards oder Gesetze lesen, wird Ihnen die Verwendung von Wörtern wie SOLL, MUSS, KANN, DARF oder DARF NICHT vertraut sein – und die gesamte Spezifikation der Conventional Commits besteht lediglich aus 16 derartig formulierten Punkten.
Es gibt zwei Abschnitte, beginnend mit der Konvention („convention“). Im Bereich „commitTypes“ werden die erlaubten Commit-Typen festgelegt; die Scopes/Themen im Bereich „commitScopes“ bleiben hier undefiniert, so dass entsprechend beliebige Themen gesetzt werden dürfen.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Es folgen Regexe für Issue- und Release-Angaben, um diese – sofern vorhanden – ebenfalls parsen zu können. Der Abschnitt „changelog“ legt nun fest, welche Commit-Typen aufgenommen werden, ob Commits mit ungültigen Nachrichten berücksichtigt weren, wie die Überschriften aussehen und wie die Links auf Issues und Commits zusammengebaut werden.
Tipp: Über den Befehl „git-conventional-commits version“ wird nicht nur die Version des Tools ausgegeben, sondern auch Warnmeldungen zu allen alten Commits, dass diese nicht der Konvention entsprechen. Das ist so zwar nicht dokumentiert, funktioniert aber zumindest hier auf mehreren Testrechnern.
Eine manuelle Überprüfung alter Nachrichten ist aber nicht Sinn der Sache, vielmehr soll das ja automatisch geschehen – und das ist Aufgabe eines Git-Hook. Standardmäßig liegen diese in einem Git-internen Verzeichnis und werden nicht via „git clone“ oder „git pull“ verteilt. Hier ist es aber gewünscht, dass die Hooks geteilt werden, also kommen sie in ein eigenes Verzeichnis:
Erstellen Sie also einen entsprechenden Ordner im Repository, teilen Sie Git diese Konfiguration mit, erstellen Sie die Hook-Datei „commit-msg“ und machen Sie sie ausführbar:
Der Kopf eines automatisch generierten Changelogs.
(Bild: Lang / DownMarker)
Das Layout ist eher hemdsärmelig vom originalen Markdown übernommen, aber grundsätzlich sollte sich erkennen lassen, dass so ein wirklich gut lesbarer Changelog entsteht, der anstelle der drei Punkte in der Mitte freilich noch reichlich weitere Informationen und Einträge liefert.
Was auch klar sein sollte: Wenn die Commit-Nachrichten nicht dem Standard entsprechen, wird der git-commit-Befehl mit einer passenden Fehlermeldung unterbrochen.
Wenn die Conventional Commits via Git produktiv eingesetzt werden sollen, würde sich zudem noch der Einsatz von pre-commit anbieten, einem Framework zum Verwalten von Git-Hooks. Schließlich ist es unter Umständen sinnvoll, die Prüfung vom Client auf den Server zu verlegen, damit alle Kontributoren gezwungen sind, sich an die Konvention zu halten. Im obigen Setup wird der commit-msg-Hook zwar geteilt, aber das Kommandozeilenwerkzeug git-conventional-commits müsste auf jedem Client installiert werden.
Conventional Commits mag derzeit noch ein eher kleines Projekt sein, überzeugt aber mit sehr guten Ansätzen und Ideen – über die sich so ziemlich alle Git-Nutzer Gedanken machen sollten.