Git – Committing
In dieser Lektion lernst du, was ein Commit ist und wofür er eingesetzt wird.
Was ist ein Git Commit?
Der Commit wird benutzt, um die durchgeführten Änderungen in deinem Repository aufzuzeichnen. Es ist der nächste Befehl nach git add. Jeder Commit enthält die Indexdaten und die Commit-Nachricht.
Jeder Commit bildet eine Eltern-Kind-Beziehung. Wenn wir eine Datei in Git hinzufügen, findet sie in der Staging Area statt (siehe letzte Lektion zu Staging). Ein Commit-Befehl wird benutzt, um Updates aus dem Staging-Bereich in das Repository zu übertragen.
Das Staging und der Commit sind miteinander verbunden. Das Staging erlaubt es uns, weiterhin Änderungen am Repository vorzunehmen, und wenn wir diese Änderungen an das Versionskontrollsystem weitergeben wollen, erlaubt uns derCommit-Befehl, diese Änderungen aufzuzeichnen.
Commits sind die Momentaufnahmen des Projekts.
Jeder Commit wird im Master-Branch des Repositorys aufgezeichnet. Wir können die Commits abrufen oder auf die ältere Version zurücksetzen.
Zwei verschiedene Commits werden niemals überschrieben, da jeder Commit seine eigene Commit-ID hat. Diese Commit-ID ist eine kryptographische Nummer, die durch den SHA (Secure Hash Algorithmus) Algorithmus erzeugt wird.
Lass uns die verschiedenen Arten von Commits anschauen.
Der "git commit" Befehl
Der Commit-Befehl wird die Änderungen committen und eine Commit-ID generieren. Der Commit-Befehl ohne Argumente öffnet den Standardtexteditor und fragt nach der Commit-Nachricht. Wir können unsere Commit-Nachricht in diesem Texteditor angeben. Der Befehl sieht so aus:
git commit
Der obige Befehl wird einen Standard-Editor auffordern und nach einer Commit-Nachricht fragen. Wir haben eine Änderung an lerneprogrammieren.html vorgenommen und wollen, dass sie committed wird.
Wenn wir den Befehl ausführen, wird er einen Standardtexteditor aufrufen und nach einer Commit-Nachricht fragen. Der Texteditor wird wie folgt aussehen:
Falls sich bei dir ein Texteditor in deiner Git Bash öffnet, kannst du wie folgt navigieren:
Drücke die Esc-Taste und danach 'I' für den Einfügemodus. Tippe eine Commit-Nachricht ein, was immer du willst. Drücke die Esc-Taste und danach ':wq' um zu speichern und den Editor zu verlassen. Damit haben wir erfolgreich einen Commit gemacht.
Der Output sieht ungefähr so aus:
[master 5260c9e] Mein erster Commit.
1 file changed, 1 insertion(+), 1 deletion(-)
Wir können den Commit per git log Befehl überprüfen.
Der Output sieht ungefähr so aus:
commit 559f13dcd5ae1f8ebed63ee5736f4c2241b9d766
Author: Daniel Schwede <daniel@lerneprogrammieren.de>
Date: Thu Jul 23 17:37:11 2020 +0200
Mein erster Commit.
Wir können in der obigen Ausgabe sehen, dass die Log-Option die Commit-ID, Angaben zum Autor, Datum und Uhrzeit sowie die Commit-Meldung anzeigt.
Git commit -a
Der Commit-Befehl bietet auch die -a Option, um mehrere Updates zu comitten. Er wird verwendet, um die Snapshots aller Änderungen zu committen. Diese Option berücksichtigt nur bereits hinzugefügte Dateien in Git. Die neu erstellten Dateien werden nicht übertragen.
Schaue dir folgendes Beispiel an:
Wir haben einige Updates an unserer Staging-Datei lerneprogrammieren.html vorgenommen und eine neue Datei hallowelt.txt erstellt.
Überprüfe den Status des Repositorys und führe den Commit-Befehl wie folgt aus:
git commit -a
Der Output von "git status" sieht ungefähr so aus:
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: lerneprogrammieren.html
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: lerneprogrammieren.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
hallowelt.txt
Screen aus Git Bash:
Der obige Befehl ruft unseren Standardtexteditor auf und fragt nach der Commit-Nachricht.
Der Output für "git commit -a" sieht ungefähr so aus:
[master 1a1421e] Mein zweiter Commit.
1 file changed, 2 insertions(+), 1 deletion(-)
Wenn wir jetzt erneut "git status" aufrufen sehen wir Folgendes:
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hallowelt.txt
nothing added to commit but untracked files present (use "git add" to track)
Wie wir in der obigen Ausgabe sehen können, wurde die neue Datei hallowelt.txt nicht committed, da sie dem Repository (mit "git add hallowelt.txt") noch nicht hinzugefügt wurde.
Git commit -m
Mit der Option -m des Commit-Befehls kannst du die Commit-Nachricht auf der Kommandozeile schreiben. Dieser Befehl ruft nicht exttra deinen eingestellten Texteditor auf.
So sieht der Befehl aus:
Der obige Befehl wird einen Commit mit der angegebenen Commit-Nachricht machen.
Fügen wir jetzt unsere neue Datei "hallowelt.txt" mit git add hallowelt.txt hinzu und geben danach git commit -m ein, um das Ganze auszuprobieren.
Der Output sieht ungefähr so aus:
$ git commit -m "Hallowelt Datei hinzugefügt"
[master c329b18] Hallowelt Datei hinzugefügt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hallowelt.txt
Hier einmal die Prozedur als Screenshot:
In der obigen Ausgabe wird die hallowelt.txt mit einer Commit-Meldung ("Hallowelt Datei hinzugefügt") an unser Repository übergeben.
Wir können auch die Option -am für Staging-Dateien verwenden. Dieser Befehl wird sofort einen Commit für bereits gestagte Dateien mit einer Commit-Nachricht durchführen. So sieht der Befehl aus:
git commit -am "Commit Nachricht"
Die Option "Ändern" erlaubt es uns, den letzten Commit zu bearbeiten. Wenn wir versehentlich eine falsche Commit-Meldung eingegeben haben, dann ist diese Funktion eine schnelle Option für uns eine Änderung durchzuführen.
So sieht die "-amend" Option aus:
Der obige Befehl wird den Standardtexteditor auffordern und uns erlauben, die Commit-Nachricht zu bearbeiten.
Zusammenfassung
Sehr gut! Du hast in dieser Lektion gelernt, was ein Commit ist. Füge für jeden Commit eine spezifische Commit-Nachricht hinzu, damit du die einzelnen Commits später besser nachvollziehen kannst. Es hilft auch deinen Teammitgliedern sich in der Historie der Commits schneller zurechtzufinden.
Weiterhin hast du die wichtigsten Optionen für den Commit Befehl gelernt. Es gibt noch weitere Optionen, die wir hier nicht aufgeführt haben. Bei Bedarf findest du diese in der Git Dokumentation. Die hier gezeigten Optionen decken jedoch die meisten Praxisfälle bereits ab und wir können in Ruhe weitermachen.
Im nächsten Modul beschäftigen wir uns mit Remote Repositories (wie z.B. GitHub) und Branches.