Rückgängigmachen unter Beibehaltung von Änderungen mit --no-commit
Manchmal möchten Sie die Änderungen eines Commits rückgängig machen, diese aber in Ihrem Arbeitsverzeichnis behalten, um sie zu ändern. Sie möchten beispielsweise einen Fehler im Commit korrigieren, anstatt ihn vollständig zu verwerfen. Die Option --no-commit
(oder -n
) ist dafür perfekt geeignet.
Zuerst setzen wir unser Repository auf den Zustand vor unserem letzten Revert zurück, damit wir einen anderen Ansatz versuchen können. Dazu verwenden wir git reset
. Dieser Befehl verschiebt den HEAD
-Zeiger, und --hard
aktualisiert die Dateien in Ihrem Arbeitsverzeichnis entsprechend.
git reset --hard HEAD~1
Dieser Befehl entfernt den gerade erstellten "Revert"-Commit. Sie können dies bestätigen, indem Sie git log --oneline
ausführen.
Nun machen wir den "unerwünschten" Commit erneut rückgängig, aber diesmal mit der Option --no-commit
. Denken Sie daran, den Hash für den Commit "Add a second, unwanted line" zu verwenden.
Bitte ersetzen Sie <your-commit-hash>
durch den tatsächlichen Hash aus Ihrem Terminal.
git revert --no-commit <your-commit-hash>
Dieses Mal öffnet sich kein Editor. Der Revert ist vorbereitet, aber nicht committet. Überprüfen Sie den Status Ihres Repositorys:
git status
Die Ausgabe zeigt, dass story.txt
für den Commit vorgemerkt ist:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: story.txt
Die Änderungen des rückgängig gemachten Commits befinden sich nun in Ihrem Staging-Bereich. Sie können sie jetzt ändern. Ersetzen wir die unerwünschte Zeile durch eine bessere. Öffnen Sie story.txt
mit nano
:
nano story.txt
Die Datei wird so aussehen, wie sie nach dem Revert in Schritt 2 aussah. Fügen Sie am Ende der Datei eine neue, bessere Zeile hinzu:
And they lived happily ever after.
Speichern und beenden Sie nano (Strg+O
, Enter
, Strg+X
).
Fügen Sie nun Ihre Änderungen zum Staging-Bereich hinzu und committen Sie sie mit einer neuen, aussagekräftigen Nachricht:
git add story.txt
git commit -m "Replace unwanted line with a proper conclusion"
Überprüfen Sie abschließend den Log und den Dateiinhalt, um das Ergebnis zu sehen:
git log --oneline
cat story.txt
Der Log zeigt Ihren neuen Commit an, und story.txt
enthält den korrigierten Inhalt. Sie haben erfolgreich einen Commit rückgängig gemacht, während Sie dessen Änderungen beibehalten und modifiziert haben.