Gibt es eine Möglichkeit, nicht übertragene Änderungen am Arbeitsverzeichnis aus einer git reset --hard HEAD
?
Antworten
Zu viele Anzeigen?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!
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 Siegit gc
. Wenn Sie zu 99,9 % sicher sind, dass Sie diese Änderungen nie wieder brauchen werden, danngit stash
ist immer noch Ihr Freund für den 0,1 %-Fall. Wenn Sie sich zu 100 % sicher sind, danngit 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, danngit reset --keep
ist Ihr Freund. Es tut das Gleiche wiegit 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.
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
IntelliJ verfügt über einen temporären Ordner, der über den Befehl history zugänglich ist:
- Wählen Sie im Navigationsbereich den Ordner aus, aus dem Sie Dateien wiederherstellen möchten.
- Doppeltippen Sie auf die Umschalttaste (Shift-Shift)
- Geben Sie in das sich öffnende Eingabefeld Local History ein und drücken Sie die Eingabetaste
- Wählen Sie Verlauf anzeigen
- Jetzt können Sie zu der Version zurückkehren, die Sie benötigen.