Changelogs automatisch aus Commits generieren lassen mit Claude
AI generated
Claude
>_
Claude AI · Release-Automatisierung · Git
Changelogs aus Commits generieren
Kategorisierte Release Notes statt roher Commit-Listen

Eine rohe Liste von Commit-Nachrichten ist kein Changelog, das jemand lesen will. Claude kann Commit-Historien zwischen zwei Releases kategorisieren, zusammenfassen und in eine Struktur bringen, die Nutzer und Entwickler tatsächlich verstehen. Dieser Artikel zeigt den praktischen Workflow, die Abgrenzung zu Tools wie semantic-release und die nötige Qualitätskontrolle.

11 Min. Lesezeit Changelog Conventional Commits Release Notes CI/CD

1. Conventional Commits als Grundlage

Jede automatisierte Changelog-Generierung steht und fällt mit der Qualität der zugrunde liegenden Commit-Nachrichten. Die Conventional-Commits-Konvention strukturiert jede Nachricht in einen Typ wie feat, fix, refactor oder chore, einen optionalen Scope in Klammern und eine kurze Beschreibung, ergänzt um einen optionalen Body und Footer für Breaking Changes. Diese Struktur macht Commits maschinell auswertbar, weil ein Typ wie fix eindeutig einer Kategorie im Changelog zugeordnet werden kann, ohne den Freitext interpretieren zu müssen.

Ohne diese Konvention bleibt sowohl klassischen Tools als auch Claude nur die Interpretation von Freitext-Commits, was bei uneinheitlichem Team-Stil zu deutlich schlechteren Ergebnissen führt. Teams, die noch keine Konvention etabliert haben, sollten diese vor der Einführung einer Changelog-Automatisierung festlegen, etwa über einen commit-msg-Hook, der falsch formatierte Commits bereits lokal ablehnt.


# Beispiele für Conventional-Commits-Nachrichten
feat(checkout): Gastbestellung ohne Kundenkonto ermöglichen
fix(cart): doppelte Versandkosten bei mehreren Adressen beheben
refactor(api): ProductRepository von Legacy-Klasse entkoppeln
chore(deps): guzzlehttp/guzzle auf 7.9 anheben

BREAKING CHANGE: Der Endpunkt /api/v1/cart liefert jetzt ein
Array statt eines einzelnen Objekts zurueck.

2. Warum reines Parsing an Grenzen stößt

Klassische Tools wie semantic-release oder conventional-changelog parsen Commit-Typen zuverlässig und generieren daraus rein mechanisch eine gruppierte Liste, meist eins zu eins nach dem Muster Typ, Scope, Beschreibung. Das funktioniert gut für eine technische Rohfassung, liefert aber selten einen Text, den ein Produktmanager oder Endkunde ohne Nacharbeit lesen möchte, weil zusammenhängende Commits nicht erkannt und redundante oder widersprüchliche Einträge nicht bereinigt werden.

Claude ergänzt genau diese Lücke: Statt jeden Commit einzeln aufzulisten, kann das Modell mehrere zusammengehörige Commits, etwa eine Feature-Implementierung mit drei nachfolgenden Bugfix-Commits zum selben Feature, zu einem einzigen, verständlichen Changelog-Eintrag verdichten. Das ist eine semantische Aufgabe, für die reines Pattern-Matching nicht ausreicht, weil sie Kontextverständnis über mehrere Commits hinweg erfordert.

3. Workflow: Commits zwischen zwei Releases einsammeln

Der erste Schritt jeder Changelog-Generierung ist rein mechanisch: Mit git log lassen sich alle Commits zwischen zwei Tags oder Branches abrufen, idealerweise inklusive Commit-Hash, Autor und vollständiger Nachricht, damit Claude bei Bedarf auf den Body und den Footer zugreifen kann. Wichtig ist, Merge-Commits ohne eigenen inhaltlichen Wert herauszufiltern, damit sie die spätere Zusammenfassung nicht unnötig aufblähen.

Diese Rohdaten bilden die alleinige Eingabe für den nächsten Schritt. Claude erhält damit ausschließlich Informationen, die tatsächlich im Repository vorhanden sind, und erfindet keine Funktionen, die nicht committet wurden, solange der Prompt klar auf die gelieferte Commit-Liste als einzige Quelle verweist.


# Alle Commits zwischen zwei Tags sammeln, Merge-Commits ausschliessen
git log v2.3.0..v2.4.0 --no-merges \
  --pretty=format:'%H|%an|%s%n%b%n---' > commits-v2.4.0.txt

wc -l commits-v2.4.0.txt

4. Kategorisierung und Zusammenfassung durch Claude

Sobald die Commit-Liste vorliegt, übernimmt Claude zwei Aufgaben gleichzeitig: die Kategorisierung nach Typ, etwa Neue Funktionen, Fehlerbehebungen und Breaking Changes, sowie die sprachliche Verdichtung technischer Commit-Nachrichten zu Sätzen, die auch ohne Codebasis-Kenntnis verständlich sind. Ein Commit wie fix(cart): race condition bei parallelem addItem behoben wird dabei zu einer nutzerorientierten Formulierung wie Ein seltener Fehler beim gleichzeitigen Hinzufügen mehrerer Artikel zum Warenkorb wurde behoben.

Entscheidend für die Qualität ist ein klar strukturierter Prompt, der die gewünschte Kategorisierung, die Zielgruppe des Changelogs und den gewünschten Detailgrad vorgibt. Ohne diese Vorgaben tendiert das Modell dazu, entweder zu technisch für Endnutzer oder zu oberflächlich für ein technisches Entwicklerteam zu formulieren.

5. Praxisbeispiel: Prompt und Ausgabe für einen Release

In der Praxis hat sich ein zweistufiger Prompt bewährt: Zunächst wird Claude gebeten, jeden Commit einer Kategorie zuzuordnen und thematisch verwandte Commits zu gruppieren, danach folgt ein zweiter Durchlauf, der aus dieser Gruppierung den finalen, für Menschen lesbaren Changelog-Text formuliert. Diese Trennung verbessert die Nachvollziehbarkeit, weil sich die Zwischenkategorisierung separat prüfen lässt, bevor der finale Text erzeugt wird.

Für ein Team, das monatlich release, reicht ein einziger Prompt-Durchlauf pro Release meist aus, während Teams mit mehreren Releases pro Woche von einem automatisierten Skript profitieren, das den zweistufigen Prompt bei jedem Tag-Push auslöst und das Ergebnis als Entwurf in einer Pull-Request-Beschreibung ablegt.


from anthropic import Anthropic

client = Anthropic()

with open("commits-v2.4.0.txt", encoding="utf-8") as f:
    commits = f.read()

prompt = f'''Kategorisiere die folgenden Commits in Neue Funktionen,
Fehlerbehebungen, Breaking Changes und Sonstiges. Fasse thematisch
zusammengehörige Commits zu einem einzigen, für Endnutzer
verständlichen Satz zusammen. Erfinde keine Funktionen, die nicht
in den Commits vorkommen.

Commits:
{commits}'''

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=2048,
    messages=[{"role": "user", "content": prompt}],
)
print(response.content[0].text)

6. Integration in die CI/CD-Pipeline

Für eine dauerhaft nutzbare Lösung lohnt sich die Einbettung in die bestehende Release-Pipeline: Ein Job läuft beim Setzen eines neuen Tags, sammelt die Commits seit dem letzten Tag, ruft die Claude API mit dem oben skizzierten Prompt auf und legt das Ergebnis als Entwurf in einer Datei oder als Kommentar in der zugehörigen Release-Pull-Request ab. Wichtig ist, den generierten Text nicht automatisch und ungeprüft zu veröffentlichen, sondern als Vorschlag zu behandeln, der von einem Menschen bestätigt wird.

In GitLab CI lässt sich ein solcher Job leicht als eigene Stage nach dem Build, aber vor dem eigentlichen Deployment einrichten, sodass der Changelog-Entwurf vorliegt, bevor die neue Version tatsächlich ausgerollt wird. Das gibt dem Team die Möglichkeit, den Text vor der Veröffentlichung noch anzupassen.


# .gitlab-ci.yml (Auszug)
generate-changelog:
  stage: pre-deploy
  image: python:3.12-slim
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - pip install anthropic
    - git fetch --tags
    - PREV_TAG=$(git describe --tags --abbrev=0 "$CI_COMMIT_TAG^")
    - git log "$PREV_TAG..$CI_COMMIT_TAG" --no-merges
        --pretty=format:'%H|%an|%s%n%b%n---' > commits.txt
    - python scripts/generate_changelog.py commits.txt > CHANGELOG_DRAFT.md
  artifacts:
    paths: [CHANGELOG_DRAFT.md]

7. Qualitätskontrolle der generierten Texte

Ein automatisch generierter Changelog-Entwurf ersetzt keine menschliche Prüfung, insbesondere weil Claude gelegentlich zwei thematisch ähnliche, aber inhaltlich unterschiedliche Commits fälschlich zusammenfasst oder eine Formulierung wählt, die technisch ungenau ist. Ein kurzer Review-Schritt vor der Veröffentlichung, bei dem ein Entwickler den Entwurf gegen die tatsächlichen Commits gegenliest, bleibt deshalb ein fester Bestandteil des Prozesses, auch wenn er nur wenige Minuten dauert.

Besonders bei Breaking Changes ist diese Prüfung nicht verhandelbar, weil eine ungenaue oder unvollständige Beschreibung einer Breaking Change bei Nutzern zu fehlerhaften Upgrades führen kann. Der Prompt sollte deshalb explizit anweisen, Breaking Changes gesondert, ausführlich und mit konkretem Migrationshinweis zu formulieren, statt sie in der allgemeinen Zusammenfassung untergehen zu lassen.

8. Grenzen und typische Fallstricke

Die größte Fehlerquelle bleibt die Qualität der Eingabedaten: Schlecht formulierte oder inkonsistente Commit-Nachrichten wie Fix oder WIP liefern Claude keine ausreichende Grundlage für eine sinnvolle Kategorisierung, egal wie gut der Prompt formuliert ist. In solchen Fällen hilft nur die Verbesserung der Commit-Disziplin im Team, nicht ein ausgefeilterer Prompt.

Ein weiterer Fallstrick ist die Vermischung mehrerer nicht zusammengehöriger Änderungen in einem einzigen Commit, was Claude dazu zwingt, eine einzige Nachricht künstlich in mehrere Changelog-Kategorien aufzuteilen, was leicht zu Ungenauigkeiten führt. Kleinere, thematisch fokussierte Commits verbessern deshalb nicht nur die Code-Review-Qualität, sondern direkt auch die Qualität der automatisch generierten Changelogs.

9. Best Practices für den Teameinsatz

Wer Changelog-Generierung mit Claude dauerhaft einführen will, sollte zunächst die Commit-Konvention über einen automatisierten Hook durchsetzen, danach den Prompt für die Zielgruppe des Changelogs klar formulieren und schließlich einen verbindlichen, kurzen Review-Schritt vor jeder Veröffentlichung einplanen. Diese drei Bausteine zusammen liefern deutlich konsistentere Ergebnisse als eine einmalige, unstrukturierte Anfrage an das Modell.

Sinnvoll ist außerdem, den Prompt selbst zu versionieren und im Repository abzulegen, damit Änderungen an der Kategorisierungslogik nachvollziehbar bleiben und im Team diskutiert werden können, statt in einer einzelnen Chat-Sitzung verloren zu gehen. Ein solcher Prompt wird damit zu einem echten Teil der Projektinfrastruktur, nicht zu einem einmaligen Experiment.

Ansatz Kategorisierung Sprachliche Verdichtung Typischer Einsatz
semantic-release / conventional-changelog Mechanisch nach Commit-Typ Keine, listet Commits eins zu eins Automatisierte Versionierung ohne Nacharbeit
Claude (einstufiger Prompt) Semantisch, erkennt Zusammenhänge Einfache Umformulierung pro Commit Kleine Teams mit überschaubarer Commit-Zahl
Claude (zweistufiger Prompt) Semantisch, mit separater Gruppierung Verdichtung mehrerer Commits zu einem Eintrag Größere Releases mit vielen zusammenhängenden Commits
Manuelles Verfassen Vollständig durch Menschen Höchste Qualität, aber zeitaufwendig Sehr kleine, seltene Releases
Hybrid (Claude-Entwurf + Review) Semantisch, menschlich geprüft KI-Entwurf, redigiert von einem Entwickler Empfohlener Standardfall für die meisten Teams

Mironsoft

KI-gestützte Entwicklung, Agenten-Workflows und Team-Prozesse

Claude oder andere KI-Tools im Team einsetzen, aber ohne klaren Workflow?

Wir richten KI-gestützte Entwicklungs-Workflows für Teams ein, von CLAUDE.md-Konventionen über Subagenten-Strategien bis zu Code-Review-Prozessen, die menschliche Kontrolle und KI-Tempo verbinden.

Workflow-Setup

CLAUDE.md, Projektkonventionen und Tool-Berechtigungen für das Team sauber einrichten.

Agenten-Strategie

Subagenten- und Automatisierungs-Workflows für wiederkehrende Entwicklungsaufgaben aufbauen.

Team-Onboarding

Entwickler im produktiven, sicheren Umgang mit KI-Coding-Assistenten schulen.

10. Zusammenfassung

Changelog-Generierung aus Commits: Das Wichtigste auf einen Blick

Was

Claude kategorisiert und verdichtet Commit-Historien zwischen zwei Releases zu einem lesbaren Changelog.

Voraussetzung

Konsistente Conventional-Commits-Nachrichten, sonst fehlt Claude die Grundlage für eine sinnvolle Kategorisierung.

Abgrenzung

semantic-release parst mechanisch, Claude ergänzt semantisches Verständnis und sprachliche Verdichtung.

Praxis-Tipp

Generierte Texte immer als Entwurf behandeln und vor der Veröffentlichung gegen die Commits gegenlesen.

11. FAQ: Changelog-Generierung aus Commits: Das Wichtigste auf einen Blick

1Reicht eine einfache Commit-Liste als Eingabe für Claude aus?
Ja, sofern die Commits klar formuliert sind und idealerweise der Conventional-Commits-Konvention folgen. Zusätzlicher Kontext wie Body und Footer verbessert die Qualität der Kategorisierung weiter.
2Was ist der Unterschied zu semantic-release?
semantic-release parst Commit-Typen mechanisch und generiert daraus eine strukturierte, aber unverdichtete Liste. Claude ergänzt semantisches Verständnis, gruppiert zusammengehörige Commits und formuliert nutzerorientierte Sätze.
3Kann Claude Breaking Changes zuverlässig erkennen?
Wenn Breaking Changes im Commit-Footer klar markiert sind, erkennt Claude sie zuverlässig. Ohne diese Markierung hängt die Erkennung von der Qualität der Commit-Beschreibung ab und sollte manuell geprüft werden.
4Sollte der generierte Changelog ungeprüft veröffentlicht werden?
Nein. Ein kurzer Review-Schritt vor der Veröffentlichung ist empfehlenswert, weil gelegentlich Commits falsch gruppiert oder Formulierungen technisch ungenau ausfallen können.
5Lohnt sich die Integration in eine CI-Pipeline?
Für Teams mit regelmäßigen Releases ja, weil sich der Changelog-Entwurf so automatisch bei jedem neuen Tag erzeugen lässt und nur noch geprüft statt komplett neu geschrieben werden muss.
6Wie geht Claude mit schlecht formulierten Commit-Nachrichten um?
Bei Nachrichten wie Fix oder WIP fehlt Claude die inhaltliche Grundlage für eine sinnvolle Kategorisierung. Hier hilft nur eine bessere Commit-Disziplin im Team, kein ausgefeilterer Prompt.
7Kann Claude mehrere Commits zu einem einzigen Changelog-Eintrag zusammenfassen?
Ja, das ist einer der zentralen Vorteile gegenüber mechanischem Parsing. Zusammengehörige Commits, etwa ein Feature mit nachfolgenden Bugfixes, lassen sich zu einem einzigen, verständlichen Eintrag verdichten.
8Braucht man für die Changelog-Generierung ein besonders leistungsfähiges Modell?
In der Regel nicht. Die Aufgabe ist repetitiv und gut strukturiert, sodass ein schnelleres, günstigeres Modell für die meisten Teams ausreicht, sofern die Commit-Qualität hoch ist.
9Wie viele Commits kann Claude in einem Durchlauf verarbeiten?
Das hängt vom verfügbaren Kontextfenster ab, in der Praxis lassen sich mehrere hundert Commits problemlos in einem einzigen Prompt verarbeiten, bevor eine Aufteilung in mehrere Anfragen nötig wird.
10Ersetzt eine automatisch generierte Release-Beschreibung die Dokumentation?
Nein. Ein Changelog fasst Änderungen knapp zusammen, ersetzt aber keine ausführliche Dokumentation neuer Funktionen, insbesondere nicht bei komplexen, erklärungsbedürftigen Features.