Git Commit: Eine Meisterklasse

Veröffentlicht: 2023-02-26
Laptop auf blauem Hintergrund mit einer Linux-Eingabeaufforderung.
fatmawati achmad zaenuri/Shutterstock.com
Der Git-Commit-Befehl speichert Kopien der Änderungen aus Ihrem Arbeitsverzeichnis in Ihrem Git-Repository. Aber es kann auch verwendet werden, um bestehende Commits zu ändern und Commits rückgängig zu machen.

Eine Grundvoraussetzung für jedes Versionskontrollsystem ist es, verschiedene Dateiversionen für Sie zu speichern. In Git heißt das der Befehl commit . Hier ist alles, was Sie wissen müssen.

Inhaltsverzeichnis

Was ist ein Commit in Git?
Konfigurieren des Commit-Befehls
Verwenden des Commit-Befehls
Ein grundlegendes Commitment
Auto-Staging-Dateien
Inszenieren und Begehen zugleich
Bindung an einen anderen Zweig
Änderungen an Commits vornehmen
Entfernen von Änderungen aus einem Commit
Zurücksetzen eines gesamten Commit
Das Schweizer Taschenmesser von Git

Was ist ein Commit in Git?

Commits sind eine Reihe von Schnappschüssen, die während des gesamten Lebenszyklus eines Projekts gemacht werden und seine Entwicklungsgeschichte ausmachen. Commits ermöglichen es uns, eine Version des Projekts zu extrahieren, wie es zu verschiedenen Zeitpunkten in der Vergangenheit war. Warum ist das wichtig?

Versionskontrollsysteme (VCSs) werden am häufigsten mit Software-Quellcode und Entwicklungsprojekten verwendet. Sie können jedoch erfolgreich mit jeder Sammlung von Textdateien verwendet werden, z. B. Markdown-Dateien, die Kapitel eines Buches enthalten.

Möglicherweise möchten Sie nicht, dass jede Datei in Ihren Projektverzeichnissen vom VCS verarbeitet wird, daher müssen Sie in der Lage sein, die Dateien zu benennen, die versioniert werden sollen. Dadurch werden sie der Versionskontrollansicht des Projekts hinzugefügt. Sie werden auf Änderungen überwacht.

Eine andere Möglichkeit, dies zu erreichen, ist die Verwendung einer Ignorierliste. Dadurch wird Git mitgeteilt, welche Dateien, Verzeichnisse oder Dateitypen es immer ignorieren soll.

Wenn im Laufe der Zeit neue Dateien zum Projekt hinzugefügt werden, müssen einige dem Versionskontrollsystem hinzugefügt werden. In Git wird dies durch den Befehl add gehandhabt. Wie wir sehen werden, leistet der add Befehl eigentlich doppelte Dienste.

Um einen Verlauf der am Projekt vorgenommenen Änderungen zu erhalten, bitten Sie Git regelmäßig, mithilfe des commit Befehls einen Snapshot des Status des Projekts zu speichern. An dieser Stelle taucht der Befehl add in unserem Workflow wieder auf. Mit dem add Befehl teilen wir Git mit, welche geänderten Dateien wir in den Snapshot aufgenommen haben möchten. Dann verwenden wir commit , um Git anzuweisen, den Snapshot zu erstellen.

Konfigurieren des Commit-Befehls

Informationen über den Commit werden darin gespeichert, so dass man immer wissen kann, wer den Commit wann gemacht hat und was der Commit enthält. Einige dieser Metadaten werden zum Commit-Zeitpunkt erfasst, z. B. die Commit-Nachricht.

Metadaten zur Identität der Mitglieder des Entwicklungsteams können von jedem Benutzer konfiguriert werden, um zu verhindern, dass wiederholt dieselben Informationen bereitgestellt werden.

Verwenden Sie diesen Befehl, um Ihren Namen global für alle Repositories auf Ihrem Computer festzulegen.

 git config --global user.name "Dave McKay" 

Festlegen des globalen Git-Benutzernamens

Verwenden Sie diesen Befehl, um zu überprüfen, ob Ihr Name festgelegt wurde.

 git config --global user.name 

Überprüfen des globalen Git-Benutzernamens

Wenn Sie für ein bestimmtes Repository einen anderen Namen verwenden müssen, wechseln Sie in das Verzeichnis des Projekts und verwenden Sie denselben Befehl ohne die Option --global .

 git config user.name "McKay, David"
 git config user.name 

Festlegen eines Repository-spezifischen Git-Benutzernamens

Wir haben jetzt einen anderen Standardbenutzernamen für dieses Repository, und unser globaler Name wird weiterhin für andere Repositorys verwendet.

Auf ähnliche Weise können wir eine E-Mail-Adresse entweder global oder für ein einzelnes Repository festlegen, indem wir die Option --global einbeziehen oder weglassen.

 git config user.email "[email protected]"
 git config --global user.email "[email protected]"
 git config benutzer.email
 git config --global user.email 

Festlegen von globalen und Repository-spezifischen Git-Standardbenutzer-E-Mail-Adressen

Diese Einstellungen werden in Konfigurationsdateien gespeichert. Globale Git-Einstellungen werden in „~/.gitconfig“ gespeichert, und Repository-spezifische Einstellungen werden in der „.git/config“-Datei des Repositorys gespeichert.

Der commit -Befehl referenziert und verwendet diese Werte, während er arbeitet.

Verwenden des Commit-Befehls

Die grundlegende Verwendung des commit Befehls besteht darin, die Dateien, die sich im Staging-Bereich befinden, der als Index bezeichnet wird, und sie als Commit im aktuellen Zweig des Repositorys zu speichern.

Ein grundlegendes Commitment

Wir haben ein Projekt mit einer geänderten Datei. Wir verwenden den Befehl add , um die Datei bereitzustellen, und übertragen sie dann. Wir verwenden die Option -m (commit message), damit wir den Zweck der Änderungen kurz beschreiben können. Wenn wir diese Option nicht verwenden, werden wir zur Eingabe einer Commit-Nachricht aufgefordert, während der Commit stattfindet. Es ist bequemer, einen in der Befehlszeile hinzuzufügen.

 git füge jibber.c hinzu
 git commit -m "Aktualisierter Hilfetext" 

Staging und Commit einer einzelnen Datei

Wenn wir den Befehl git log verwenden, können wir die Details der Commits in chronologischer Reihenfolge überprüfen, wobei der neueste Commit ganz oben in der Liste steht.

 Git-Protokoll 

Überprüfen des Git-Repository-Protokolls

Die Commits werden in less angezeigt.

Der letzte Commit oben im Git-Protokoll

Der Commit wurde mit dem Namen und der E-Mail-Adresse versehen, die wir zuvor angegeben haben, und unsere Commit-Nachricht wird ebenfalls aufgezeichnet.

Auto-Staging-Dateien

Das Bereitstellen vieler Dateien kann einige Zeit in Anspruch nehmen. Ein anderer Ansatz ist die Verwendung der Option -A (all) mit add .

Dadurch werden automatisch alle geänderten Dateien zusammen mit allen derzeit nicht verfolgten Dateien bereitgestellt. Das Staging von nicht getrackten Dateien respektiert die Einstellungen in Ihrer „.gitignore“-Datei. Git stellt keine Dateien bereit, von denen Sie ihm gesagt haben, dass Sie nicht aufgenommen werden möchten. Schließlich werden Dateien im Index, die sich nicht mehr im Arbeitsverzeichnis befinden, aus dem Index entfernt .

Offensichtlich kann die Option -A eine Menge auf einmal bewirken. Die Option --dry-run gibt Ihnen eine Vorschau der Änderungen, ohne sie tatsächlich auszuführen.

 git add -A --dry-run 

Verwenden von --dry-run zur Vorschau der Dateien, die bereitgestellt und nicht bereitgestellt werden

In unserem Beispiel werden zwei geänderte vorhandene Dateien und zwei neue Dateien bereitgestellt. Lassen Sie uns fortfahren und die Option -A verwenden, bevor wir den commit Befehl verwenden.

 git füge -A hinzu
 git commit -m "Erweitertes Parsing" 

Übertragen geänderter und neu erstellter Dateien nach Verwendung der Option add -A

Wir können sehen, dass insgesamt vier Dateien geändert wurden. Zwei davon sind die neu erstellten Dateien, die aufgelistet werden.

Inszenieren und Begehen zugleich

Der commit Befehl hat eine Kleinbuchstaben-Option -a (all). Dadurch werden das Staging und das Committen von Dateien in einem Schritt durchgeführt.

Die Option commit -a stellt geänderte vorhandene Dateien bereit und schreibt sie fest und entfernt Dateien aus dem Index, wenn sie aus Ihrem Arbeitsverzeichnis entfernt wurden. Nicht nachverfolgte Dateien werden nicht automatisch bereitgestellt.

Wie der add Befehl hat auch der commit-Befehl eine --dry-run Option, mit der Sie seine Aktionen vor der Ausführung in der Vorschau anzeigen können.

 git commit -a --dry-run 

Verwenden der Option commit -a, um Änderungen in der Vorschau anzuzeigen, ohne sie auszuführen

Jetzt führen wir den Befehl aus.

 git commit -a --dry-run 

Verwenden der Option commit -a zum Bereitstellen und Festschreiben in einem Schritt

Die Dateien werden für uns bereitgestellt und übergeben.

Bindung an einen anderen Zweig

Wenn Sie einige Änderungen an Dateien in Ihrem Arbeitsverzeichnis vorgenommen haben und dann feststellen, dass Sie nicht den richtigen Zweig ausgecheckt haben, müssen Sie Ihre Änderungen an den richtigen Zweig übertragen, ohne den aktuellen Zweig zu beeinträchtigen.

Git hat keinen Befehl zum Festschreiben an einen anderen Zweig. Aber Sie können diese Situation mit ein wenig Git-Geschicklichkeit korrigieren.

Wir verwenden den stash -Befehl von Git, um eine Kopie der Änderungen zu erstellen. Dann checken wir den richtigen Branch aus und wenden die Änderungen aus dem Stash an. Um die gespeicherten Änderungen anzuwenden, verwenden wir den pop Befehl anstelle des apply -Befehls. Der pop Befehl wendet die Änderungen an und entfernt sie auch aus dem Stash.

Wir haben einige Änderungen im new-parser Zweig unseres Repositorys vorgenommen. Sie sollten im classic-parser Zweig erstellt worden sein.

 git stash
 git checkout Classic-Parser
 Git Stash-Pop 

Änderungen stashen, einen Branch auschecken und die Änderungen aus dem Stash anwenden

Wir können jetzt einen commit durchführen und diesen Branch aktualisieren.

 git commit -a -m "Pre-Parser-Funktionen hinzugefügt" 

Festschreiben der Änderungen, die aus dem Stash abgerufen wurden

Wenn wir zum new-parser Zweig zurückkehren, können wir sehen, dass er auf dem neuesten Stand ist, was bedeutet, dass die Änderungen aus Ihrem Arbeitsverzeichnis entfernt wurden und Ihr Repository und Ihre Dateien synchron sind.

 git checkout new-parser
 Git-Status 

Überprüfen des Status eines Zweigs, um sicherzustellen, dass er auf dem neuesten Stand ist

VERWANDT: So aktualisieren und pflegen Sie separate Git-Zweige

Änderungen an Commits vornehmen

Wenn Sie Ihre Commit-Nachricht verbessern müssen – vielleicht haben Sie darin einen Tippfehler entdeckt – oder vergessen haben, eine Datei bereitzustellen, die in den Commit aufgenommen werden sollte, können Sie die Option --amend verwenden, um die Dinge zu korrigieren. Der Vorbehalt ist, dass dies nicht für Commits verwendet werden sollte, die in ein Remote-Repository gepusht wurden.

In unserer letzten Commit-Nachricht hätte „fraze“ „phrase“ sein sollen. Wenn wir git log verwenden, können wir dies sehen.

Das Git-Protokoll mit einem hervorgehobenen Typ

Um dies zu korrigieren, verwenden wir die Option --amend wie folgt.

 git commit --amend -m "Optimierte Phrasenerkennung" 

Verwenden der Option commit --amend zum Korrigieren einer Commit-Nachricht

Wenn wir git log erneut verwenden, können wir sehen, dass der alte Commit durch einen neuen mit der korrigierten Commit-Nachricht ersetzt wurde.

Das Git-Protokoll mit der korrigierten Commit-Nachricht

Wenn wir eine Datei hinzufügen möchten, die wir vergessen haben, bereitzustellen, können wir diese Datei festschreiben, sodass sie als Teil des vorherigen Festschreibens angezeigt wird.

Wir verwenden add , um die Datei bereitzustellen, und führen dann einen Commit mit der Option --amend durch. Die Option --no-edit bedeutet, dass wir keine neue Commit-Nachricht bereitstellen müssen. Die vorherige Commit-Nachricht wird beibehalten.

 git füge jibber.c hinzu
 git commit --amend --no-edit 

Commit einer Datei zum vorherigen Commit

Entfernen von Änderungen aus einem Commit

Wenn Sie versehentlich eine Datei bereitgestellt und übergeben haben, die Sie nicht beabsichtigt haben, können Sie diese Datei mit dem Befehl reset aus dem Commit entfernen. Wir setzen den Commit zurück in den Staging-Bereich oder Index. Dann entfernen wir die Datei und übertragen die restlichen Dateien erneut.

Um den letzten Commit in den Staging-Bereich zurückzusetzen, verwenden wir den Befehl reset --soft . HEAD~ ist eine Abkürzung für „the commit behind the HEAD of the project commit timeline“ oder auf Englisch „das letzte Commit“.

 git reset --soft HEAD~ 

Zurücksenden des letzten Commits an den Staging-Bereich

Um die Datei zu entfernen, die nicht hätte aufgenommen werden sollen, verwenden wir den Befehl reset --mixed . Dadurch werden diese Änderungen wieder in das Arbeitsverzeichnis zurückgesetzt, wodurch die geänderte Datei als nicht bereitgestellte, nicht festgeschriebene Datei neu erstellt wird.

 git reset --mixed jibber.c 

Entfernen einer Datei aus dem Staging-Bereich von Git

Wir müssen die anderen Dateien, die im Index verbleiben, festschreiben.

 git commit -m "Experimentelle Optimierungen" 

Festschreiben der Dateien, die im Staging-Bereich verbleiben

Die anderen beiden Dateien, die sich im ursprünglichen Commit befanden, werden für uns erneut festgeschrieben.

VERWANDT: Wie man Git-Commits repariert, bearbeitet oder rückgängig macht (Ändern des Git-Verlaufs)

Zurücksetzen eines gesamten Commit

Manchmal ist es am einfachsten, einen gesamten Commit rückgängig zu machen. Es versetzt Ihr Arbeitsverzeichnis und Ihr Repository wieder in den Zustand, in dem sie sich vor dem Commit befanden.

Wir müssen die gehashte Referenz-ID des Commits verwenden. Wir können dies mit git log finden:

Das Git-Protokoll mit hervorgehobener Commit-ID

Kopieren Sie diese Referenz und verwenden Sie sie im Befehl revert :

 git revert e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

Zurücksetzen eines Commit, das durch seine Commit-ID identifiziert wird

Dadurch wird Ihr Standardeditor geöffnet, sodass Sie eine Zurücksetzungsnachricht bearbeiten können. Es ist eine Standardnachricht für Sie eingetragen. Sie können diese entweder verwenden oder nach Ihren Wünschen bearbeiten.

Bearbeiten der Zurücksetzungsnachricht, wobei die Standardnachricht hervorgehoben ist

Wenn Sie mit Ihrer Rückkehrnachricht zufrieden sind, speichern Sie die Datei und beenden Sie den Editor. In nano machst du das mit „Strg+O“ und „Strg+X“.

Die abgeschlossene Zurücksetzungsaktion, die einen gesamten Commit rückgängig macht

Wenn wir git log noch einmal verwenden, können wir sehen, dass ein neuer Commit hinzugefügt wurde, der die Änderungen des rückgängig gemachten Commits rückgängig macht.

Das Schweizer Taschenmesser von Git

Offensichtlich ist commit einer der wichtigsten Git-Befehle. Es kann viel, also gibt es viel zu lernen. Es ist gut investierte Zeit, sich mit den weniger genutzten Funktionen vertraut zu machen. Wenn Sie einen Fehler sofort korrigieren müssen, werden Sie froh sein, dass Sie sich im Voraus vorbereitet haben.

VERWANDT: Verwendung von Git Merge