git commit
Definition
Der Befehl git commit speichert alle aktuell gestageten Änderungen des Projekts. Commits werden erstellt, um den aktuellen Zustand eines Projekts festzuhalten. Festgeschriebene Snapshots gelten als sichere Versionen eines Projekts, da Git vor Änderungen nachfragt. Bevor der Befehl git commit ausgeführt wird, wird der Befehl git add verwendet, um Änderungen zu stagen, die anschließend in einem Commit gespeichert werden.
Funktionsweise
Git-Snapshots werden im lokalen Repository festgeschrieben. Git ermöglicht es, Commits lokal zu sammeln, anstatt Änderungen sofort an ein zentrales Repository zu pushen. Dies bietet viele Vorteile, wie das Aufteilen einer Funktion in Commits, das Gruppieren verwandter Commits und das Bereinigen der lokalen Historie vor dem Pushen zum zentralen Repository. Dies gibt Entwicklern auch die Möglichkeit, isoliert zu arbeiten.
Häufige Optionen
git commit -a | Erstellt einen Snapshot aller Änderungen im Arbeitsverzeichnis. Nur Änderungen an verfolgten Dateien werden einbezogen. |
|---|---|
git commit -m "commit message" | Erstellt einen Commit mit einer übergebenen 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 inline-Nachricht zu erstellen. |
git commit --amend | Ändert den letzten Commit. Gestagete Änderungen werden dem vorherigen Commit hinzugefügt. Dieser Befehl öffnet den systemweit konfigurierten Texteditor und ändert die zuvor angegebene Commit-Nachricht. |
Änderungen mit einem Commit speichern
Im folgenden Beispiel haben wir die Datei w3docs.txt mit geänderten Inhalten im aktuellen Branch. Um den gestageten Snapshot der Datei zu committen, sollten Sie die Datei zunächst mit dem Befehl git add stagen.
Befehl git add
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.
Befehl 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 erstellt:
Git-Commit
git commitDas Ausführen von git commit öffnet einen Texteditor (den wir über git config festlegen können), der nach einer Commit-Protokollnachricht und einer Liste dessen fragt, was committet wird:
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 Commit-Format von Git fasst die Änderung in der ersten Zeile in unter 50 Zeichen zusammen, gefolgt von einer Leerzeile und einer detaillierten 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 der Commit-Nachricht ist die Betreffzeile, der Rest ist der Körper.
Einen Commit aktualisieren (amenden)
Das folgende Beispiel öffnet den konfigurierten Texteditor, der bereits mit der eingegebenen Commit-Nachricht vorausgefüllt ist. Das bedeutet, dass Sie den letzten Commit bearbeiten, anstatt einen neuen zu erstellen.
git add und git commit
git add w3docs.txt
git commit --amendGit commit vs. SVN commit
SVN ist ein zentralisiertes Anwendungsmodell, während Git ein verteiltes Anwendungsmodell ist. Ein svn commit pushen Änderungen vom lokalen Client zu einem zentralen Repository. Bei Git werden die Snapshots im lokalen Repository festgeschrieben. 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 zeichnet einen Diff auf, der auf die ursprüngliche Datei im Repository angewendet wird. Git zeichnet den vollständigen Zustand des Projekts in jedem Commit auf. Beim Speichern des Projektzustands erstellt Git einen Snapshot der aktuellen Dateien und speichert eine Referenz auf diesen Snapshot. Wenn sich eine Datei nicht geändert hat, speichert Git sie nicht erneut, was den Speicherplatz optimiert.


Praxis
Welche Merkmale und Optionen hat der Befehl 'git commit'?