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
