697 Stimmen

Wiederherstellung nach dem Verlust von nicht übertragenen Änderungen durch "git reset --hard"

Gibt es eine Möglichkeit, nicht übertragene Änderungen am Arbeitsverzeichnis aus einer git reset --hard HEAD ?

65voto

JonathanTien Punkte 1336

Wenn Sie etwas wie IntelliJ:

Wählen Sie im Kontextmenü die Option Lokaler Verlauf, und klicken Sie im Untermenü auf Verlauf anzeigen:

Die lokale Verlaufsansicht für ein Projekt oder einen Ordner zeigt Ihnen alles die Sie in den letzten Tagen durchgeführt haben. In der Spalte Aktion im des unteren Teils des Dialogfelds wählen Sie die Aktion aus, die Sie rückgängig zurücknehmen möchten. [...] Der obere Teil des Dialogfelds zeigt nun die Baumansicht der geänderten Dateien. Wenn Sie nur die gelöschte Datei wiederherstellen möchten, unabhängig von den anderen Änderungen, die seitdem vorgenommen wurden, können Sie die Datei Lost.txt in der Baumansicht auswählen und auf die Schaltfläche Zurücksetzen klicken.

http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/

Das hat mir gerade den Arsch aus dem Feuer geholt!

49voto

user1147827 Punkte 471

Ich habe gerade git reset --hard und alle nicht bestätigten Änderungen verloren. Glücklicherweise verwende ich einen Editor (IntelliJ), und ich konnte die Änderungen aus dem lokalen Verlauf wiederherstellen. Mit Eclipse sollten Sie das Gleiche tun können.

23voto

Matthieu Moy Punkte 12851

Per Definition, git reset --hard wirft nicht übertragene Änderungen weg, ohne dass Git sie wiederherstellen kann (Ihr Backup-System kann helfen, aber nicht Git).

Tatsächlich gibt es nur sehr wenige Fälle, in denen git reset --hard ist eine gute Idee. In den meisten Fällen gibt es einen sichereren Befehl, um das Gleiche zu tun:

  • Wenn Sie Ihre unbestätigten Änderungen wegwerfen wollen, dann verwenden Sie git stash . Es wird eine Sicherungskopie dieser Änderungen aufbewahrt, die nach einiger Zeit verfällt, wenn Sie git gc . Wenn Sie zu 99,9 % sicher sind, dass Sie diese Änderungen nie wieder brauchen werden, dann git stash ist immer noch Ihr Freund für den 0,1 %-Fall. Wenn Sie sich zu 100 % sicher sind, dann git stash ist immer noch Ihr Freund, denn diese 100% haben einen Messfehler ;-).

  • Wenn Sie Ihren Standort wechseln möchten HEAD und die Spitze des aktuellen Zweigs in der Geschichte, dann git reset --keep ist Ihr Freund. Es tut das Gleiche wie git reset --hard sondern wird no verwerfen Sie Ihre lokalen Änderungen.

  • Wenn Sie beides tun wollen, dann git stash && git reset --keep ist Ihr Freund.

Bringen Sie Ihren Fingern bei, nicht zu benutzen git reset --hard Es wird sich eines Tages auszahlen.

15voto

DragonKnight Punkte 1556

Das ist es, was ich normalerweise tue, wenn ich einige Änderungen verliere.

git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...

um den Zeiger zurück auf Ihre vorherigen Commits zu setzen, aber die Änderungen, die Sie bisher vorgenommen haben, in Ihren letzten Commits zu behalten checkout git reset --soft dadada

14voto

Lucian Enache Punkte 2410

IntelliJ verfügt über einen temporären Ordner, der über den Befehl history zugänglich ist:

  1. Wählen Sie im Navigationsbereich den Ordner aus, aus dem Sie Dateien wiederherstellen möchten.
  2. Doppeltippen Sie auf die Umschalttaste (Shift-Shift)
  3. Geben Sie in das sich öffnende Eingabefeld Local History ein und drücken Sie die Eingabetaste
  4. Wählen Sie Verlauf anzeigen
  5. Jetzt können Sie zu der Version zurückkehren, die Sie benötigen.

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