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.

30voto

Skippy VonDrake Punkte 796

Wenn keines der oben genannten Methoden funktioniert, können Sie möglicherweise Daten mit dem Vorschlag von hier abrufen: http://www.spinics.net/lists/git/msg62499.html

git prune -n
git cat-file -p

1 Stimmen

4 Jahre später, immer noch ein Lebensretter!

1 Stimmen

Ich habe ein c++ Programm geschrieben, um die Ergebnisse zu konkatenieren (Ich hatte etwa 100 Objekte, die in meinem Repository herumschwebten, so dass dies notwendig war). Kompilieren und ausführen Sie einfach und geben Sie dann Ihr lokales Git-Repo-Verzeichnis ein. raw.githubusercontent.com/bluuman/git-recover-files/master/…

0 Stimmen

Dies ist eine gute Methode, nachdem ich das git prune -n ausgeführt habe, habe ich viele Zeilen bekommen, diese Zeilen sind entweder tree oder blob oder commit, und ich fülle alle Hash-Zeichenfolgen von blob aus, und ich versuche den zweiten Befehl zu verwenden git cat-file -p , und ich kann die verlorene Datei immer noch nicht finden. Meine Situation ist ziemlich einfach, ich habe eine neue Datei namens a.cpp erstellt und diese Datei dem Index hinzugefügt, später habe ich den Befehl git rm -f verwendet, um diese Datei zu entfernen, und ich sehe, dass a.cpp verloren gegangen ist.

12voto

Cory Danielson Punkte 13816

Wenn Sie die Änderungen übernommen und gepusht haben, können Sie dies tun, um die Datei zurückzubekommen

// Ersetzen Sie 2 durch die Anzahl der Commits zurück, bevor die Datei gelöscht wurde.
git checkout HEAD~2 path/to/file

0 Stimmen

Dies hat bei 'Änderungen, die vorgenommen werden sollen:' funktioniert, wo eine Datei von einem alten Git-Cherry-Pick gelöscht wurde, die ich noch brauchte. Ich hatte versucht, git reset HEAD~ auszuführen, was nicht funktioniert hat.

7voto

krethika Punkte 3216

Es gibt bereits einige gute Antworten, aber ich könnte eine wenig genutzte Syntax vorschlagen, die nicht nur großartig funktioniert, sondern auch sehr explizit ist in dem, was du willst (deshalb nicht beängstigend oder mysteriös)

git checkout @{"vor 20 Minuten"}

4voto

Narnia_Optimus Punkte 196

Wenn Sie den Befehl git rm -r --cached . auf einem Repository mit Änderungen ausführen, die nicht gestaged sind (also auch nicht committet wurden), können Sie den Vorgang rückgängig machen (von der Löschung entstagen) mit dem Befehl git restore --staged .

Also kurz gesagt, um rückgängig zu machen git rm -r --cached . müssen Sie nur git restore --staged . ausführen

0 Stimmen

Das hat für mich glücklicherweise funktioniert, bevor ich ein Commit gemacht habe, aber zur Klarheit müssen Sie die Datei, die Sie entfernt haben, am Ende anhängen, wie folgt: git restore --staged completePathToRemovedFile

3voto

Do Nhu Vy Punkte 38281

Liste Commit einholen

git log --oneline

Zum Beispiel hat der stabile Commit den Hash-Wert: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81

git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master

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