git commit
Hier erfahren Sie, was git commit ist, wie es funktioniert und welche gängigen Optionen es gibt.
Der Befehl git commit speichert die gestagten Änderungen als neuen Snapshot in der Versionsgeschichte des Repositories. Jeder Commit ist ein dauerhafter, benannter Punkt, zu dem Sie zurückkehren, den Sie vergleichen oder mit anderen teilen können. Diese Seite erklärt, was ein Commit ist, wie der Stage-then-Commit-Workflow zusammenhängt, die nützlichsten Optionen, wie man gute Commit-Nachrichten schreibt und wie sich Gits Snapshot-Modell von älteren Systemen wie SVN unterscheidet.
Definition
Der Befehl git commit speichert alle aktuell gestagten Änderungen des Projekts. Commits werden erstellt, um den aktuellen Zustand eines Projekts festzuhalten. Committete Snapshots gelten als sichere Versionen eines Projekts, da sie in Ihrer lokalen Versionsgeschichte gespeichert sind und Git sie nicht stillschweigend verändert. Bevor Sie git commit ausführen, verwenden Sie den Befehl git add, um die Änderungen zu stagen, die der Commit speichern soll.
Ein Commit besteht aus drei Dingen:
- Ein Snapshot jeder verfolgten Datei zum Zeitpunkt des Commits (kein Diff — siehe Snapshots, keine Unterschiede unten).
- Metadaten: der Autor, ein Zeitstempel und die von Ihnen verfasste Nachricht.
- Ein Eltern-Zeiger auf den vorherigen Commit, mit dem Git eine Versionsgeschichte aufbaut, die Sie mit git log durchsuchen können.
Jeder Commit wird durch einen eindeutigen 40-Zeichen-SHA-1-Hash identifiziert (zum Beispiel 9fceb02...), den Sie bei Verweisen auf die ersten sieben Zeichen kürzen können.
Funktionsweise
Git-Snapshots werden in Ihr lokales Repository committet. Git ermöglicht es Ihnen, Commits lokal zu sammeln, anstatt Änderungen sofort auf einen zentralen Server zu übertragen. Sie veröffentlichen sie später mit git push. Diese Trennung bietet mehrere Vorteile:
- Ein Feature in Commits aufteilen, sodass jeder Schritt klein und überprüfbar ist.
- Zusammengehörige Änderungen in einem einzigen, in sich geschlossenen Commit bündeln.
- Lokale Versionsgeschichte bereinigen (zusammenführen, umformulieren, neu ordnen), bevor sie geteilt wird.
- Offline arbeiten — Sie können auf einem Flug committen und pushen, wenn Sie wieder verbunden sind.
Der typische Lebenszyklus einer Änderung ist Arbeitsverzeichnis → Staging-Bereich → Commit: Sie bearbeiten Dateien, führen git add aus, um die gewünschten Teile zu stagen, und dann git commit, um sie zu speichern. Alles, was Sie nicht stagen, verbleibt in Ihrem Arbeitsverzeichnis und wird nicht in den Commit aufgenommen.
Gängige Optionen
| git commit -a | Committet einen Snapshot aller Änderungen im Arbeitsverzeichnis. Nur Änderungen an verfolgten Dateien werden berücksichtigt. |
|---|---|
| git commit -m "commit message" | Erstellt einen Commit mit einer angegebenen Commit-Nachricht. Standardmäßig öffnet git commit den lokal konfigurierten Texteditor, um eine Commit-Nachricht einzugeben. |
| git commit -am "commit message" | Kombiniert die Optionen -a und -m, um alle geänderten verfolgten Dateien zu stagen und einen Commit mit einer inlinegeschriebenen Nachricht zu erstellen. |
| git commit --amend | Ändert den letzten Commit. Gestagte Änderungen werden dem vorherigen Commit hinzugefügt, und der Editor öffnet sich, damit Sie die Nachricht ändern können. |
git commit -a (und -am) staged nur Dateien, die Git bereits verfolgt. Brandneue Dateien werden nie automatisch erfasst — Sie müssen sie zuerst mit git add hinzufügen. Führen Sie im Zweifelsfall git status aus.
Änderungen mit einem Commit speichern
Im folgenden Beispiel haben wir die Datei w3docs.txt mit geändertem Inhalt im aktuellen Branch. Um den gestagten Snapshot der Datei zu committen, müssen Sie die Datei zuerst mit dem Befehl git add stagen.
git add Befehl
git add w3docs.txtDas Ausführen von git add verschiebt die Datei w3docs.txt in den Git-Staging-Bereich. Verwenden Sie den Befehl git status, um die Ausgabe zu sehen.
git status
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: w3docs.txtDie Ausgabe zeigt an, dass w3docs.txt mit dem nächsten Commit gespeichert wird. Der Commit wird durch Ausführen von erstellt:
Git commit
git commitDas Ausführen von git commit öffnet einen Texteditor (der über git config eingestellt werden kann) und fordert eine Commit-Protokollnachricht sowie eine Liste der zu committenden Änderungen an:
git commit im Editor
# Enter the commit message of your changes. Lines that start
# with '#' will be ignored, an empty message breaks off the commit.
# On branch master
# Changes needed to be committed:
# (use "git reset HEAD ..." to unstage)
#
#modified: w3docs.txtDas konventionelle Git-Commit-Format fasst die Änderung in der ersten Zeile in unter 50 Zeichen zusammen, gefolgt von einer Leerzeile und einer ausführlichen Erklärung. Zum Beispiel:
git commit Nachricht
Change the message displayed by w3docs.txt
- Update the sayHello() function to get the username
- Change the sayGoodbye() function to a more welcoming messageDie erste Zeile ist der Betreff; der Rest ist der Textkörper. Speichern und schließen Sie den Editor, um den Commit abzuschließen.
Eine gute Commit-Nachricht schreiben
Eine klare Nachricht macht die Versionsgeschichte durchsuchbar und erleichtert die Überprüfung. Die weit verbreitete Konvention lautet:
- Halten Sie die Betreffzeile unter 50 Zeichen und schreiben Sie sie im Imperativ ("Loginformular hinzufügen", nicht "Hinzugefügt" oder "Fügt hinzu").
- Beenden Sie den Betreff nicht mit einem Punkt.
- Lassen Sie eine Leerzeile zwischen Betreff und Textkörper — viele Tools sind darauf angewiesen.
- Brechen Sie den Textkörper bei etwa 72 Zeichen um und erklären Sie warum die Änderung vorgenommen wurde, nicht nur was geändert wurde.
Mit einer Inline-Nachricht committen
Bei kleinen, einzweckigen Änderungen überspringen Sie den Editor normalerweise und übergeben die Nachricht direkt:
git commit -m "Update greeting in w3docs.txt"Verwenden Sie git commit -am "...", um jede geänderte verfolgte Datei zu stagen und in einem Schritt zu committen.
Einen Commit aktualisieren (amend)
git commit --amend ersetzt den neuesten Commit, anstatt einen neuen hinzuzufügen. Dies ist nützlich, wenn Sie vergessen haben, eine Datei zu stagen oder einen Tippfehler in der letzten Nachricht korrigieren möchten. Der Editor öffnet sich mit der vorherigen Nachricht vorausgefüllt:
git add und git commit
git add w3docs.txt
git commit --amendUm nur die Nachricht zu ändern, ohne den Editor zu öffnen:
git commit --amend -m "Corrected commit message"Das Amend-Kommando überschreibt den letzten Commit und gibt ihm einen neuen Hash. Ändern Sie nur Commits, die Sie noch nicht gepusht und geteilt haben — das Umschreiben der öffentlichen Versionsgeschichte zwingt alle anderen, ihre Kopien abzugleichen. Um einen noch nicht geteilten Commit rückgängig zu machen, verwenden Sie git reset.
Git commit vs. svn commit
SVN ist ein zentralisiertes Anwendungsmodell, während Git ein verteiltes Anwendungsmodell ist. SVN commit überträgt Änderungen vom lokalen Client an ein zentrales Repository. In Git werden Snapshots in das lokale Repository committet. Git-Commits können an beliebige Remote-Repositories gepusht werden.
Snapshots, keine Unterschiede
Git basiert auf Snapshots, während SVN Unterschiede in Dateien verfolgt. Ein svn commit speichert einen Diff, der auf die Originaldatei im Repository angewendet wird. Git speichert den vollständigen Projektzustand in jedem Commit. Beim Speichern des Projektzustands erstellt Git einen Snapshot der aktuellen Dateien und speichert eine Referenz auf diesen Snapshot. Wenn eine Datei nicht geändert wurde, speichert Git sie nicht erneut, was den Speicher optimiert.


Verwandte Befehle
- git add — Änderungen stagen, bevor Sie sie committen.
- git status — Sehen Sie, was gestagt ist und was nicht.
- git log — Die Versionsgeschichte Ihrer Commits durchsuchen.
- git reset — Dateien entstagen oder einen Commit rückgängig machen.
- git push — Ihre lokalen Commits in ein Remote-Repository veröffentlichen.