Git Commit: Eine Meisterklasse
Veröffentlicht: 2023-02-26
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.
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"
Verwenden Sie diesen Befehl, um zu überprüfen, ob Ihr Name festgelegt wurde.
git config --global user.name
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
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
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"
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
Die Commits werden in less
angezeigt.
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
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"
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
Jetzt führen wir den Befehl aus.
git commit -a --dry-run
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
Wir können jetzt einen commit
durchführen und diesen Branch aktualisieren.
git commit -a -m "Pre-Parser-Funktionen hinzugefügt"
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
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.
Um dies zu korrigieren, verwenden wir die Option --amend
wie folgt.
git commit --amend -m "Optimierte Phrasenerkennung"
Wenn wir git log
erneut verwenden, können wir sehen, dass der alte Commit durch einen neuen mit der korrigierten Commit-Nachricht ersetzt wurde.
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
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~
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
Wir müssen die anderen Dateien, die im Index verbleiben, festschreiben.
git commit -m "Experimentelle Optimierungen"
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:
Kopieren Sie diese Referenz und verwenden Sie sie im Befehl revert
:
git revert e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8
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.
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“.
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