Menu
Coddy logo textTech

Git: Commits zusammenfassen (Squash)

Zuletzt aktualisiert

Squash fasst mehrere Commits zu einem einzigen zusammen, sodass eine unordentliche Reihe von "wip", "Tippfehler behoben", "jetzt aber wirklich behoben"-Commits zu einem einzigen sauberen Commit wird. Das übliche Werkzeug ist das interaktive Rebase - git rebase -i -, bei dem du die zusammenzufassenden Commits markierst. Da Squash die Historie umschreibt, mach das vor dem Push oder auf einem Branch, an dem nur du arbeitest.

Probiere diese Befehle im Terminal-Playground aus - eine echte Shell in deinem Browser, ganz ohne Installation.

Squashen faltet eine Reihe kleiner Commits per interaktivem Rebase zu einem einzigen sauberen Commit zusammen.

Syntax

CommandWhat it does
git rebase -i HEAD~3Rebased die letzten 3 Commits interaktiv
git rebase -i mainRebased jeden Commit seit main
git merge --squash featureFasst die Commits eines Branches beim Merge zu einem zusammen
git reset --soft HEAD~3 && git commitFasst die letzten 3 Commits ohne Rebase zusammen

Befehle des interaktiven Rebase

Ersetze im geöffneten Editor pick durch einen davon.

KeywordWhat it does
pickBehält den Commit unverändert
squash (s)Fasst mit dem vorherigen Commit zusammen und kombiniert die Nachrichten
fixup (f)Fasst zusammen, verwirft aber die Nachricht dieses Commits
reword (r)Behält den Commit, bearbeitet aber seine Nachricht

Praxisbeispiel

Fasse die letzten drei Commits vor dem Push zu einem zusammen.

StepActionResult
1git rebase -i HEAD~3Öffnet die letzten 3 Commits im Editor
2Setze Commit 2 und 3 auf squashMarkiert sie zum Zusammenfassen mit dem ersten
3Speichern und die kombinierte Nachricht bearbeitenAus drei Commits wird ein sauberer Commit

FAQ zum Zusammenfassen von Git-Commits (Squash)

Wie fasse ich die letzten N Commits in Git zusammen?
Führe git rebase -i HEAD~N aus (zum Beispiel HEAD~3 für die letzten drei). Lass im Editor den ersten Commit auf pick und ändere die übrigen auf squash (oder fixup, um deren Nachrichten zu verwerfen). Speichere, bearbeite die kombinierte Commit-Nachricht, und die Commits werden zu einem zusammengefasst.
Was ist der Unterschied zwischen squash und fixup?
Beide fassen einen Commit in den vorherigen zusammen. squash behält die Nachricht des Commits und lässt dich diese in einem Editor mit den anderen kombinieren. fixup verwirft die Nachricht des Commits vollständig und behält nur die des vorherigen Commits - praktisch für "ups, kleine Korrektur"-Commits, die du nicht in der finalen Nachricht haben willst.
Wie fasse ich beim Mergen einen ganzen Branch zusammen?
Verwende git merge --squash feature und dann git commit. Das übernimmt alle Änderungen des Branches als gestagte Änderungen und lässt dich sie als einen einzigen Commit auf dem Ziel-Branch festhalten, ohne die einzelnen Commits des Branches zu übernehmen. Der "Squash and merge"-Button von GitHub macht dasselbe.
Kann ich ohne interaktives Rebase zusammenfassen?
Ja. git reset --soft HEAD~N setzt den Branch N Commits zurück, behält dabei alle Änderungen gestagt, und ein einziges git commit hält sie dann als einen fest. Das ist ein schneller Weg, die neuesten Commits zusammenzufassen, ohne den Rebase-Editor zu öffnen.
Kann ich das online üben?
Ja. Öffne den Terminal-Playground, um interaktives Rebase in einer echten Shell in deinem Browser auszuführen - ganz ohne Installation. Coddys kostenloser interaktiver Git-Kurs behandelt Rebasing und das Aufräumen der Historie ebenfalls Schritt für Schritt.
Coddy programming languages illustration

Lerne Git mit Coddy

LOS GEHT'S