463 Stimmen

Wie kann man ein "git rm -r ." rückgängig machen?

Ich habe aus Versehen gesagt git rm -r .. Wie kann ich mich davon erholen?

Ich habe nicht committed.

Ich glaube, alle Dateien wurden zum Löschen markiert und auch physisch aus meinem lokalen Checkout entfernt.

BEARBEITEN: Ich könnte (wenn ich den Befehl kennen würde) zum letzten Commit zurückkehren. Aber es wäre viel besser, wenn ich einfach das git rm -r . rückgängig machen könnte. Denn ich bin mir nicht wirklich sicher, was ich nach dem letzten Commit und vor dem git rm -r . gemacht habe.

3 Stimmen

Für diese spezielle Frage ist reset --hard eine gute Lösung ... es ist bereits aufgelistet, also werde ich nur in diesem Kommentar darauf hinweisen, dass Sie die Dokumentation für git-reflog überprüfen sollten.

11 Stimmen

Beachten Sie, dass git, weil Sie -f nicht an git rm angegeben haben, keine Dateien entfernt hat, die Änderungen im Index oder Arbeitsverzeichnis hatten. Daher sollte ein git reset; git checkout . alles wiederherstellen.

1 Stimmen

Achte einfach darauf - git checkout . löscht alle nicht übertragenen Änderungen.

540voto

Brian Campbell Punkte 304982
git reset HEAD

Sollte es tun. Wenn Sie keine ungespeicherten Änderungen haben, die Ihnen wichtig sind, dann

git reset --hard HEAD

sollte alles gewaltsam auf Ihren letzten Commit zurücksetzen. Wenn Sie ungespeicherte Änderungen haben, aber der erste Befehl nicht funktioniert, dann speichern Sie Ihre ungespeicherten Änderungen mit git stash:

git stash
git reset --hard HEAD
git stash pop

30 Stimmen

Bitte beachten Sie, dass git reset --hard HEAD alle nützlichen Änderungen zerstört, die Sie in übergeordneten Verzeichnissen des aktuellen Arbeitsverzeichnisses vorgenommen haben.

15 Stimmen

@Mild: Ich schwitze immer noch vor Angst!

9 Stimmen

Ich habe nicht gevotet, aber ich habe gerade stash, reset --hard, pop ausprobiert und alle meine neuesten Änderungen verloren. Vielleicht habe ich die Antwort falsch verstanden.

291voto

Jaime Bellmyer Punkte 22697

Ich habe einige Dateien mit git rm gelöscht und Änderungen vorgenommen, bevor ich meinen nächsten Commit gemacht habe, als mir klar wurde, dass ich einige dieser Dateien zurück brauche. Anstatt zu stashing und zurücksetzen, kannst du einfach die einzelnen Dateien, die du vermisst/gelöscht hast, wiederherstellen, wenn du möchtest:

git checkout HEAD Pfad/zur/Datei Pfad/zur/anderen_Datei

Dies lässt deine anderen uncommitted Änderungen intakt ohne Workarounds.

9 Stimmen

Dies hat geholfen, weil ich andere nicht übernommene Änderungen hatte.

6 Stimmen

Diese Antwort hilft denen von uns, die auf diese Frage gestoßen sind, um eine einzelne git rm rückgängig zu machen, anstatt ein gesamtes rekursives git rm -r. Für eine vollständig rekursive Löschung sind möglicherweise die anderen Lösungen besser, abhängig von der Anzahl der entfernten Dateien.

72voto

Arne L. Punkte 2015

Um einige einzelne Dateien oder Ordner wiederherzustellen, kann man folgendes verwenden:

git reset -- path/to/file
git checkout -- path/to/file

Dies wird zunächst die Indexeinträge für path/to/file wiederherstellen und die Datei so wiederherstellen, wie sie im letzten Commit war, d.h. HEAD.

Hinweis: Man kann beiden Befehlen eine Commit-Hash übergeben, um Dateien aus einem älteren Commit wiederherzustellen. Siehe git reset --help und git checkout --help für weitere Details.

1 Stimmen

Beste Antwort. Einfaches chirurgisches 'Rückgängig' einer einzelnen git rm Operation, ohne andere nicht übertragene Änderungen zu löschen.

37voto

song xu Punkte 271

rückgängig machen git rm

git rm Datei             # Datei löschen & Index aktualisieren
git checkout HEAD Datei  # Datei und Index von HEAD wiederherstellen

rückgängig machen git rm -r

git rm -r Verzeichnis          # Verfolgte Dateien im Verzeichnis löschen & Index aktualisieren
git checkout HEAD Verzeichnis  # Datei und Index von HEAD wiederherstellen

rückgängig machen git rm -rf

git rm -r Verzeichnis          # Verfolgte Dateien löschen & unbestätigte Änderungen löschen
nicht möglich           # `unbestätigte Änderungen` können nicht wiederhergestellt werden.

Unbestätigte Änderungen beinhalten nicht gestagete Änderungen, gestagte Änderungen aber nicht bestätigt.

0 Stimmen

Natürlich kann nichts git rm -rf rückgängig machen, da dadurch auch nicht verfolgte oder inszenierte (nur) Dateien gelöscht werden können.

0 Stimmen

git rm -rf Datei und git rm -rf Verzeichnis löschen keine nicht nachverfolgten Dateien.

33voto

Alex Brown Punkte 40146

Aktualisierung:

Da git rm . alle Dateien in diesem und den Unterverzeichnissen des Arbeitsverzeichnisses sowie im Index löscht, müssen Sie jede dieser Änderungen rückgängig machen:

git reset HEAD . # Dies macht die Index-Änderungen rückgängig
git checkout .   # Dies holt Dateien aus diesem und den Unterverzeichnissen vom HEAD zurück

Dies sollte das gewünschte Ergebnis erzielen. Es beeinträchtigt nicht die übergeordneten Ordner Ihres ausgecheckten Codes oder des Index.


Alte Antwort, die nicht funktioniert hat:

reset HEAD

wird den Trick tun und wird keine nicht übertragenen Änderungen an Ihren Dateien löschen.

Nachdem müssen Sie alle git add Befehle wiederholen, die Sie in der Warteschlange hatten.

1 Stimmen

Entschuldigung, ich habe immer git alias.co="checkout" eingerichtet, damit git co die checkout-Funktion ausführt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X