Conventional Commits und Releases
Überblick
Commit-Nachrichten sind eine maschinenlesbare Schnittstelle, nicht nur Prosa. Automatische Versionierung und Changelog-Generierung parsen sie; eine fehlerhafte Nachricht erzeugt eine falsche öffentliche Version oder einen defekten Release. Disziplin im Kleinen (eine wohlgeformte Nachricht) liefert Korrektheit im Großen (korrektes Changelog, richtiger Versionssprung) kostenlos.
Das Format
<typ>(<bereich>): <beschreibung>
| Typ | Wirkung / Verwendung |
|---|---|
feat | Neue Funktion – Minor-Bump |
fix | Fehlerbehebung – Patch-Bump |
docs | Nur Dokumentation |
chore | Wartung, Abhängigkeiten, Konfiguration |
refactor | Verhaltenserhaltende Codeänderung |
test | Nur Tests |
ci / build | Pipeline-/Build-System-Änderungen |
- Imperativ: „X hinzufügen“, nicht „X hinzugefügt“ oder „X fügt hinzu“.
- Breaking Changes:
feat!:oder einBREAKING CHANGE:-Footer – löst einen Major-Bump aus. - Bereich optional, aber empfohlen:
feat(auth):,fix(db):.
Wichtige Details
- Die Typ↔Version-Verknüpfung bedeutet, dass ein falsch eingetipptes
featvs.fixeine falsche Version ausliefert. Wähle den Typ bewusst: „add“ = neue Funktion, „update“ = Verbesserung bestehender Funktionen, „fix“ = Fehler. - Squash-Merge: Der PR-Titel wird zum Commit, der ausgeliefert wird. Er selbst muss ein gültiger Conventional Commit sein, sonst ist der Release falsch.
- Menschlich verfasste Stimme. Keine KI-/Assistenten-Zuschreibung, keine
Co-authored-by-Trailer, keine generierten Fußnoten. Commits lesen sich, als ob ein Mensch sie geschrieben hat.
Häufige Rationalisierungen
| Ausrede | Realität |
|---|---|
| „Die Nachricht ist eigentlich egal“ | Sie steuert das Changelog und die Versionsnummer. Sie ist mechanisch wichtig. |
„chore ist nah genug für diese Funktion“ | chore erhöht die Version nicht; Nutzer erhalten Ihre Funktion nicht in einem Release. Verwenden Sie den richtigen Typ. |
| „Ich korrigiere den PR-Titel später“ | Beim Squash-Merge ist der Titel zum Zeitpunkt des Merges endgültig. Korrigieren Sie ihn vorher. |
„Ein Co-authored-by-Trailer ist harmlos“ | Die Projektregel verbietet KI-Zuschreibung. Keine Ausnahmen. |
Rote Flaggen – STOPP
- Eine Commit-Nachricht ohne Typ-Präfix
- Verwendung von
chore/docsfür etwas, das benutzersichtbares Verhalten hinzufügt oder korrigiert - Ein Squash-PR-Titel, der kein gültiger Conventional Commit ist
- Jegliche KI-Zuschreibung oder
Co-authored-by-Zeile
Durchsetzung:
- PR-Titel – in CI validiert, blockierend (
amannn/action-semantic-pull-request). Beim Squash-Merge ist der Titel der ausgelieferte Commit, daher ist dies das entscheidende Tor. - KI-Zuschreibung – ein blockierender
No AI Attribution-Job lehntCo-authored-by-Trailer ab, die Claude/Anthropic nennen, sowieGenerated with [Claude…]-Fußnoten, sowohl in den Branch-Commits als auch im PR-Text (der Text wird zum Squash-Commit-Text). MenschlicheCo-authored-by-Trailer sind nicht betroffen. - Branch-Commit-Texte – bewusst nicht gelintet. Squash-Merge verwirft sie, daher erreichen sie nie das Changelog. Wenn Sie zu Merge-Commits wechseln, fügen Sie commitlint hinzu.
Bekannte Lücke: Wenn ein Commit von einem Agentenkonto verfasst wurde, fügt GitHub beim
Squash einen Co-authored-by-Trailer hinzu – nachdem der PR-Check durchgelaufen ist. Das
obige Tor kann dies nicht sehen. Committen Sie nicht als Agentenidentität.
Vollständige Begründung: Artikel III der Verfassung, gebündelt unter engineering-constitution/references/engineering-constitution.md.