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 ist der Befehl, der dies tut, commit
. Hier ist alles, was Sie wissen müssen.
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 von der behandelt add
Befehl. Eigentlich die add
command tut doppelten Dienst, wie wir sehen werden.
Um einen Verlauf der Änderungen, die am Projekt vorgenommen wurden, zu pflegen, bitten Sie Git regelmäßig, einen Snapshot des Status des Projekts zu speichern, indem Sie die commit
Befehl. Hier ist die add
Der Befehl taucht wieder in unserem Workflow auf. Wir benutzen das add
Befehl, um Git mitzuteilen, welche geändert Dateien, die 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 --global
Möglichkeit.
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 einschließen oder weglassen --global
Möglichkeit.
git config user.email "[email protected]"
git config --global user.email "[email protected]"
git config user.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
Befehlsreferenzen und verwendet diese Werte während des Betriebs.
Verwenden des Commit-Befehls
Die grundlegende Verwendung der commit
Der Befehl besteht darin, die Dateien, die sich im Staging-Bereich befinden, der als Index bezeichnet wird, zu nehmen und sie als Commit im aktuellen zu speichern Zweig des Repositorys.
Ein grundlegendes Commitment
Wir haben ein Projekt mit einer geänderten Datei. Wir verwenden die add
Befehl, um die Datei bereitzustellen, und übertragen Sie sie dann. Wir verwenden die -m
(Commit-Nachricht) Option, 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 add jibber.c
git commit -m "Updated help text"
Wenn wir die verwenden git log
befehlen wir können Überprüfen Sie die Details der Commits in chronologischer Reihenfolge, wobei der neueste Commit ganz oben in der Liste steht.
git log
Die Commits werden in angezeigt less
.
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 von -A
(alle) Option mit add
.
Dies inszeniert automatisch alle geändert Dateien zusammen mit allen derzeit nicht verfolgt Dateien. 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 sind Dateien im Index, die sich nicht mehr im Arbeitsverzeichnis befinden ENTFERNT aus dem Index.
Ganz einfach, die -A
Option kann viel auf einmal passieren. Der --dry-run
Option gibt Ihnen eine Vorschau der Änderungen, ohne sie tatsächlich durchzufü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 verwenden -A
Option, bevor wir die verwenden commit
Befehl.
git add -A
git commit -m "Enhanced 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 einen Kleinbuchstaben -a
(alle) Optionen. Dadurch werden das Staging und das Committen von Dateien in einem Schritt durchgeführt.
Der commit -a
Optionsstufen und Commits geändert bestehende Dateien und entfernt Dateien aus dem Index, wenn sie aus Ihrem Arbeitsverzeichnis entfernt wurden. Es nicht nicht nachverfolgte Dateien automatisch bereitstellen.
Wie add
Befehl hat der Commit-Befehl a --dry-run
Option, mit der Sie eine Vorschau der Aktionen anzeigen können, bevor Sie sie ausführen.
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 haben einige Änderungen in unseren Repositorys vorgenommen new-parser
Zweig. Sie sollen im entstanden sein classic-parser
Zweig.
git stash
git checkout classic-parser
git stash pop
Wir können jetzt a ausführen commit
und aktualisieren Sie diesen Zweig.
git commit -a -m "Added pre-parser functions"
Wenn wir zu den zurückkehren new-parser
Branch können wir sehen, dass es 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 einen Tippfehler darin entdeckt – oder vergessen haben, eine Datei bereitzustellen, die in den Commit aufgenommen werden sollte, können Sie die verwenden --amend
Möglichkeit, die Dinge richtig zu stellen. 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 verwenden git log
wir können das sehen.
Um dies zu korrigieren, verwenden wir die --amend
Option wie diese.
git commit --amend -m "Optimized phrase identification"
Wenn wir verwenden git log
Wieder einmal 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 werden verwenden add
um die Datei bereitzustellen, machen Sie dann einen Commit mit der --amend
Möglichkeit. Der --no-edit
Option bedeutet, dass wir keine neue Commit-Nachricht bereitstellen müssen. Die vorherige Commit-Nachricht wird beibehalten.
git add jibber.c
git commit --amend --no-edit
Entfernen von Änderungen aus einem Commit
Wenn Sie versehentlich eine Datei bereitgestellt und übergeben haben, die Sie nicht beabsichtigt hatten, können Sie diese Datei mit aus dem Commit entfernen Die reset
Befehl. 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 die reset --soft
Befehl. HEAD~
ist eine Abkürzung für „the commit behind the HEAD of the project commit timeline“ oder auf Englisch „the last commit“.
git reset --soft HEAD~
Um die Datei zu entfernen, die nicht hätte aufgenommen werden sollen, verwenden wir die reset --mixed
Befehl. 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 "Experimental tweaks"
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 finden, indem wir verwenden git log
:
Kopieren Sie diese Referenz und verwenden Sie sie in der revert
Befehl:
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 tun Sie dies mit „Strg+O“ und „Strg+X“.
Verwenden git log
Wieder können wir sehen, dass ein neues Commit hinzugefügt wurde, das die Änderungen des rückgängig gemachten Commits rückgängig macht.
Das Schweizer Taschenmesser von Git
Offensichtlich, commit
ist 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: So verwenden Sie Git-Merge