Rückgängigmachen des letzten Git-Commits in einem lokalen Repository
![Rückgängigmachen des letzten Git-Commits in einem lokalen Repository](/img/Git/git-reset.webp)
In diesem Artikel wird erläutert, wie wir den letzten Commit in Git rückgängig machen können. Dies ist praktisch, wenn wir die durch ein Commit eingeführten Änderungen entfernen möchten, bevor wir es in das Remote-Repository verschieben.
Lassen Sie uns gleich einsteigen.
Letztes Commit rückgängig machen, ohne Dateien in Git zu ändern
Wir werden die Dinge beginnen, indem wir diskutieren, wie wir einen Commit rückgängig machen können, während die vorherigen Änderungen an den Dateien vorgenommen werden. Dazu verwenden wir den Befehl git reset
mit dem Argument -soft
, um Git anzuweisen, den Inhalt unserer Datei beizubehalten.
$ git reset --soft HEAD~1
Der obige Befehl entfernt den letzten Commit auf unserem HEAD
.
Schauen wir uns ein Beispiel an. Hier ist der Commit-Verlauf in unserem lokalen Repository.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) Added a new file named "file.txt"
* 3b641e0 Second commit
* 21ca1e7 Initial commit
Lassen Sie uns den Befehl git reset
ausführen und seine Auswirkungen auf unser lokales Repo überprüfen.
Die obige Ausgabe zeigt, dass sich unsere file.txt
in unserem Index befindet, aber der Commit nicht vorhanden ist. Wir können Änderungen an der Datei vornehmen und sie erneut übertragen.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) (HEAD)
* 3b641e0 Second commit (HEAD~1)
* 21ca1e7 Initial commit (HEAD~2)
Unser Befehl $ git reset --soft HEAD~1
entfernt den letzten Commit. Wenn wir die letzten beiden Commits entfernen würden, hätten wir stattdessen $ git reset --soft HEAD~2
verwendet und so weiter.
Manchmal möchten wir vielleicht den Commit und die Dateien löschen. Wir verwenden den Befehl git reset
mit der Option -hard
, wie unten gezeigt.
$ git reset --hard HEAD~1
Der obige Befehl entfernt alle mit dem Commit verbundenen Änderungen aus unserem Index und Arbeitsverzeichnis.
Schauen wir uns ein Beispiel an. Hier ist ein Bild unserer Commit-Historie.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) Added a new file named "file.txt"
* 3b641e0 Second commit
* 21ca1e7 Initial commit
In diesem Szenario möchten wir den letzten Commit entfernen und die Änderungen beseitigen.
Wir rennen:
$ git reset --hard HEAD~1
HEAD is now at 3b641e0 Second commit
Lassen Sie uns den Befehl git status
ausführen, um den Status unseres Repos zu überprüfen.
Die obige Ausgabe zeigt, dass Git die Dateien aus unserem Index und Arbeitsverzeichnis entfernt hat.
Möglicherweise müssen wir auch den letzten Commit rückgängig machen und Änderungen im Arbeitsverzeichnis, aber in unserem Index beibehalten. Dazu fügen wir die Option --mixed
zu unserem Befehl git reset
hinzu, wie unten gezeigt.
$ git reset --mixed HEAD~1
Schauen wir uns ein Beispiel an. Dies ist der aktuelle Stand unserer Commit-Historie.
$ git log --oneline --graph
* c5bf6c8 (HEAD -> master) Added a new file named "file.txt"
* 3b641e0 Second commit
* 21ca1e7 Initial commit
Wir rennen:
$ git reset --mixed HEAD~1
Unsere Dateien sollten im Arbeitsverzeichnis sichtbar sein, aber nicht im Index. Lassen Sie uns dies mit dem Befehl git status
bestätigen.
Wir können sehen, dass sich unsere file.txt
unter nicht verfolgten Dateien befindet. Dies ist eine weitere Möglichkeit, einen Commit rückgängig zu machen, während Änderungen beibehalten werden.
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn