Rollback zum letzten Git-Commit

120

Ich habe gerade eine gemacht

git commit -m "blah"

Dann habe ich einige Dateien hinzugefügt. Wie kann ich ein Rollback durchführen und entfernen, was in meinen aktuellen Dateien noch nicht hinzugefügt / festgeschrieben wurde?

Blankman
quelle
15
Nein, dies ist nicht das, was das OP verlangt - es ist klar, dass er auf das letzte Commit zurücksetzen und das letzte Commit nicht rückgängig machen möchte. Er hat nicht gesagt, dass er einige Dateien hinzugefügt und sie dann festgeschrieben hat. so klar will er das letzte Commit.
Paul
1
Es ist zu schwer, eine Antwort auf diese sehr häufige Frage zu finden
Sam

Antworten:

211

Caveat Emptor - Zerstörerische Befehle voraus.

Schadensbegrenzung - git reflog kann Sie bei Bedarf retten.


1) Machen Sie lokale Dateiänderungen rückgängig und behalten Sie Ihr letztes Commit bei

git reset --hard

2) Machen Sie lokale Dateiänderungen rückgängig und ENTFERNEN Sie Ihr letztes Commit

git reset --hard HEAD^

3) HALTEN lokale Dateiänderungen und REMOVE Ihre letzten Commit

git reset --soft HEAD^
Joe Hanink
quelle
20
Dieser Befehl löscht Ihr vorheriges Commit. Verwenden Sie es daher mit Vorsicht! Git Reset - Hard ist sicherer
Rudivonstaden
9
WTF ist dies die richtige Antwort mit 36 ​​Stimmen. Ich habe gerade einen Tag Arbeit verloren ... weil ich die Antwort gelesen habe, nicht den Kommentar. Dies ist nicht die richtige Antwort auf die Frage!
Chris Nevill
1
OK, es ist nicht alles verloren! Sie können ein Git-Reflog durchführen, um zu sehen, welche Commits Sie vor dem Zurücksetzen ausgeführt haben. Sie können dann diese Commits auschecken
Chris Nevill
3
Für das, was es wert ist, hatte ich die Frage des OP als "Wie kann ich das Commit zurücksetzen und die aktuellen Dateien entfernen" interpretiert, aber es war und bleibt mehrdeutig. Ich hätte es anders verstanden, wenn das OP einfach gesagt hätte: "Wie entferne ich die aktuellen Dateien, die nicht hinzugefügt oder festgeschrieben wurden
?
2
Git ist das Gegenteil von Alan Kays Aussage Einfache Dinge sollten einfach sein, komplexe Dinge sollten möglich sein. ... vor allem von seinem ersten Teil. Trotzdem vielen Dank für Ihre Antwort. es half.
0xC0000022L
46

Wenn Sie neu hinzugefügte Inhalte und Dateien entfernen möchten, die bereits bereitgestellt wurden (also dem Index hinzugefügt wurden), verwenden Sie:

git reset --hard

Wenn Sie auch Ihr letztes Commit entfernen möchten (ist das mit der Meldung "blah"), verwenden Sie besser:

git reset --hard HEAD^

Um die nicht verfolgten Dateien (also neue Dateien, die noch nicht zum Index hinzugefügt wurden) und Ordner zu entfernen, verwenden Sie:

git clean --force -d
Paul Pladijs
quelle
wird git zurückgesetzt --hard HEAD ^ mein letztes Commit dauerhaft entfernen? als ob ich nicht darauf zurückkommen kann?
user137717
es scheint, "git clean --force -d" entfernt auch .gitignored Ordner
Alexey Timokhin
15

git reset --hard zwingt das Arbeitsverzeichnis zum letzten Festschreiben zurück und löscht neue / geänderte Dateien.

SpliFF
quelle
2
habe das getan, aber die Dateien sind immer noch da. (nicht verfolgte Dateien sind noch da)
Blankman
In diesem Fall könnten Sie einen "Git Stash" machen
Jacktrade
3
positiv bewertet, weil dies die einzige klare und eindeutige Antwort auf die klare und eindeutige Frage des OP ist.
Paul
4

Sie können ein Commit zurücksetzen, indem Sie git revert HEAD^zum vorletzten Commit zurückkehren. Sie können auch das Commit angeben, das zurückgesetzt werden soll, indem Sie die ID anstelle von HEAD ^ verwenden

Sebastian Oliva
quelle
Dies "kehrt" nicht in dem Sinne zurück, wie Sie es sagen. Dies erzeugt ein Reverse-Commit.
Stefan Kendall
4

Wenn Sie das letzte Commit einfach aufheben möchten, verwenden Sie Folgendes:

git reset HEAD~

arbeite wie ein Zauber für mich.

Abhishek saharn
quelle
2
Dies ist die genaue Antwort auf die Frage
Deniz Kocaboğa
Dies sollte die genehmigte Antwort sein
amiabl
3

Eine einfache und kinderleichte Möglichkeit , lokale Dateiänderungen seit dem letzten Commit rückgängig zu machen, besteht darin, sie in einem neuen Zweig zu platzieren:

git branch changes
git checkout changes
git add .
git commit

Damit bleiben die Änderungen im neuen Zweig. Kehren Sie zum ursprünglichen Zweig zurück, um zum letzten Commit zurückzukehren:

git checkout master

Der neue Zweig ist ein guter Ort, um verschiedene Methoden zum Zurücksetzen von Änderungen zu üben, ohne das Risiko einzugehen, dass der ursprüngliche Zweig durcheinander gebracht wird.

Terje Norderhaug
quelle