Git - Fehler beheben
Irren ist menschlich. So bietet jedes VCS eine Funktion, um Fehler bis zu einem bestimmten Punkt zu beheben. Git bietet eine Funktion, mit der wir die am lokalen Repository vorgenommenen Änderungen rückgängig machen können.
Angenommen, der Benutzer nimmt versehentlich einige Änderungen an seinem lokalen Repository vor und möchte diese Änderungen dann rückgängig machen. In solchen Fällen ist dierevert Betrieb spielt eine wichtige Rolle.
Nicht festgeschriebene Änderungen rückgängig machen
Nehmen wir an, Jerry ändert versehentlich eine Datei aus seinem lokalen Repository. Aber er möchte seine Änderung rückgängig machen. Um mit dieser Situation umzugehen, können wir die verwendengit checkoutBefehl. Mit diesem Befehl können wir den Inhalt einer Datei zurücksetzen.
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git status -s
M string_operations.c
[jerry@CentOS src]$ git checkout string_operations.c
[jerry@CentOS src]$ git status –s
Weiter können wir die verwenden git checkoutBefehl zum Abrufen einer gelöschten Datei aus dem lokalen Repository. Nehmen wir an, Tom löscht eine Datei aus dem lokalen Repository und wir möchten diese Datei zurück. Wir können dies erreichen, indem wir denselben Befehl verwenden.
[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
[tom@CentOS src]$ ls -1
Makefile
string_operations.c
[tom@CentOS src]$ rm string_operations.c
[tom@CentOS src]$ ls -1
Makefile
[tom@CentOS src]$ git status -s
D string_operations.c
Git zeigt den Brief Dvor dem Dateinamen. Dies zeigt an, dass die Datei aus dem lokalen Repository gelöscht wurde.
[tom@CentOS src]$ git checkout string_operations.c
[tom@CentOS src]$ ls -1
Makefile
string_operations.c
[tom@CentOS src]$ git status -s
Note - Wir können alle diese Operationen vor dem Festschreiben ausführen.
Entfernen Sie Änderungen aus dem Staging-Bereich
Wir haben gesehen, dass beim Ausführen eines Add-Vorgangs die Dateien vom lokalen Repository in den angegebenen Bereich verschoben werden. Wenn ein Benutzer versehentlich eine Datei ändert und sie dem Staging-Bereich hinzufügt, kann er seine Änderungen mithilfe von zurücksetzengit checkout Befehl.
In Git gibt es einen HEAD-Zeiger, der immer auf das letzte Commit zeigt. Wenn Sie eine Änderung aus dem bereitgestellten Bereich rückgängig machen möchten, können Sie den Befehl git checkout verwenden. Mit dem Befehl checkout müssen Sie jedoch einen zusätzlichen Parameter angeben, z. B. den HEAD-Zeiger. Der zusätzliche Commit-Zeigerparameter weist den Befehl git checkout an, den Arbeitsbaum zurückzusetzen und die bereitgestellten Änderungen zu entfernen.
Nehmen wir an, Tom ändert eine Datei aus seinem lokalen Repository. Wenn wir den Status dieser Datei anzeigen, wird angezeigt, dass die Datei geändert, aber nicht zum Staging-Bereich hinzugefügt wurde.
tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
# Unmodified file
[tom@CentOS src]$ git status -s
# Modify file and view it’s status.
[tom@CentOS src]$ git status -s
M string_operations.c
[tom@CentOS src]$ git add string_operations.c
Der Git-Status zeigt an, dass die Datei im Staging-Bereich vorhanden ist. Setzen Sie sie jetzt mit dem Befehl git checkout zurück und zeigen Sie den Status der zurückgesetzten Datei an.
[tom@CentOS src]$ git checkout HEAD -- string_operations.c
[tom@CentOS src]$ git status -s
Verschieben Sie den HEAD Pointer mit Git Reset
Nachdem Sie einige Änderungen vorgenommen haben, können Sie diese Änderungen entfernen. Der Befehl Git reset wird verwendet, um Änderungen zurückzusetzen oder zurückzusetzen. Wir können drei verschiedene Arten von Rücksetzvorgängen ausführen.
Das folgende Diagramm zeigt die bildliche Darstellung des Git-Reset-Befehls.
Sanft
Jeder Zweig verfügt über einen HEAD-Zeiger, der auf das letzte Commit verweist. Wenn wir den Git-Reset-Befehl mit der Option --soft gefolgt von der Commit-ID verwenden, wird der HEAD-Zeiger nur zurückgesetzt, ohne etwas zu zerstören.
.git/refs/heads/masterDatei speichert die Commit-ID des HEAD-Zeigers. Wir können es mit dem überprüfengit log -1 Befehl.
[jerry@CentOS project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1
Zeigen Sie nun die neueste Festschreibungs-ID an, die mit der obigen Festschreibungs-ID übereinstimmt.
[jerry@CentOS project]$ git log -2
Der obige Befehl führt zu folgendem Ergebnis.
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:16:25 2013 +0530
Added compiled binary
Setzen wir den HEAD-Zeiger zurück.
[jerry@CentOS project]$ git reset --soft HEAD~
Jetzt setzen wir den HEAD-Zeiger nur um eine Position zurück. Lassen Sie uns den Inhalt von überprüfen.git/refs/heads/master file.
[jerry@CentOS project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62
Die Commit-ID aus der Datei wurde geändert. Überprüfen Sie sie jetzt, indem Sie Commit-Nachrichten anzeigen.
jerry@CentOS project]$ git log -2
Der obige Befehl führt zu folgendem Ergebnis.
commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:16:25 2013 +0530
Added compiled binary
commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 10:08:01 2013 +0530
Added Makefile and renamed strings.c to string_operations.c
gemischt
Git-Reset mit der Option --mixed setzt die Änderungen aus dem Staging-Bereich zurück, die noch nicht festgeschrieben wurden. Es werden nur die Änderungen aus dem Staging-Bereich zurückgesetzt. Die tatsächlichen Änderungen an der Arbeitskopie der Datei bleiben unberührt. Der Standard-Git-Reset entspricht dem Git-Reset - gemischt.
schwer
Wenn Sie die Option --hard mit dem Befehl Git reset verwenden, wird der Staging-Bereich gelöscht. Dadurch wird der HEAD-Zeiger auf das letzte Commit der spezifischen Commit-ID zurückgesetzt und auch die lokalen Dateiänderungen gelöscht.
Lassen Sie uns die Commit-ID überprüfen.
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git log -1
Der obige Befehl führt zu folgendem Ergebnis.
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
Jerry hat eine Datei geändert, indem er am Anfang der Datei einen einzeiligen Kommentar hinzugefügt hat.
[jerry@CentOS src]$ head -2 string_operations.c
/* This line be removed by git reset operation */
#include <stdio.h>
Er überprüfte es mit dem Befehl git status.
[jerry@CentOS src]$ git status -s
M string_operations.c
Jerry fügt die geänderte Datei dem Staging-Bereich hinzu und überprüft sie mit dem Befehl git status.
[jerry@CentOS src]$ git add string_operations.c
[jerry@CentOS src]$ git status
Der obige Befehl führt zu folgendem Ergebnis.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#
Der Git-Status zeigt an, dass die Datei im Staging-Bereich vorhanden ist. Setzen Sie nun HEAD mit der Option - hard zurück.
[jerry@CentOS src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1
HEAD is now at 5776472 Removed executable binary
Der Git-Reset-Befehl war erfolgreich, wodurch die Datei aus dem Staging-Bereich zurückgesetzt und alle lokalen Änderungen an der Datei entfernt werden.
[jerry@CentOS src]$ git status -s
Der Git-Status zeigt an, dass die Datei aus dem Staging-Bereich zurückgesetzt wurde.
[jerry@CentOS src]$ head -2 string_operations.c
#include <stdio.h>
Der Befehl head zeigt auch, dass durch das Zurücksetzen auch die lokalen Änderungen entfernt wurden.