Gibt es eine Möglichkeit, nicht festgeschriebene Änderungen am Arbeitsverzeichnis von a wiederherzustellen git reset --hard HEAD
?
git reset --hard somewhere
aber einer der wenigen wirklich gefährlichen Git-Befehle.
Gibt es eine Möglichkeit, nicht festgeschriebene Änderungen am Arbeitsverzeichnis von a wiederherzustellen git reset --hard HEAD
?
git reset --hard somewhere
aber einer der wenigen wirklich gefährlichen Git-Befehle.
Antworten:
Sie können nicht festgeschriebene Änderungen im Allgemeinen nicht zurückerhalten.
Zuvor bereitgestellte Änderungen ( git add
) sollten von Indexobjekten wiederhergestellt werden können. Wenn Sie dies getan haben, verwenden Sie diese Option git fsck --lost-found
, um die damit verbundenen Objekte zu suchen. (Dadurch werden die Objekte in das .git/lost-found/
Verzeichnis geschrieben. Von dort aus können git show <filename>
Sie den Inhalt jeder Datei anzeigen.)
Wenn nicht, lautet die Antwort hier: Sehen Sie sich Ihr Backup an. Vielleicht speichert dein Editor / deine IDE temporäre Kopien unter / tmp oder C: \ TEMP und ähnliches. [1]
git reset HEAD@{1}
Dadurch wird der vorherige HEAD wiederhergestellt
[1] vim speichert z. B. optional das dauerhafte Rückgängigmachen, die Eclipse- IDE speichert den lokalen Verlauf ; Solche Funktionen können Ihre a ** speichern
Antwort von diesem SO
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
Du hast deinen Tag zurück! :)
git checkout HEAD@{19}
konnte ich die verlorenen Dateien in einem getrennten Zustand auschecken. Dann werden git checkout -b new-branch-name
sie im "angehängten" Zustand wieder zum Repo hinzugefügt.
git checkout -b new-branch-name
. Das Buch Pragmatic Version Control Using Git ist gut darin, Git in einfachen Worten zu erklären.
Ich git reset --hard
bin heute auch versehentlich auf meinem Repo gelaufen, während ich heute auch nicht festgeschriebene Änderungen hatte. Um es zurückzubekommen, rannte ich git fsck --lost-found
los und schrieb alle nicht referenzierten Blobs an <path to repo>/.git/lost-found/
. Da die Dateien nicht festgeschrieben waren, fand ich sie im other
Verzeichnis innerhalb der <path to repo>/.git/lost-found/
. Von dort aus kann ich die nicht festgeschriebenen Dateien mit sehen git show <filename>
, die Blobs kopieren und umbenennen.
Hinweis: Dies funktioniert nur, wenn Sie die Dateien, die Sie speichern möchten, zum Index hinzugefügt haben (mithilfe von git add .
). Wenn die Dateien nicht im Index enthalten waren, gehen sie verloren.
lost-found
. Aber ich könnte dann tun git show
, um Inhalte zu bekommen.
#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
Ja, Sie können nach einem Hard-Reset in Git wiederherstellen .
Verwenden:
git reflog
um die Kennung Ihres Commits zu erhalten. Dann benutze:
git reset --hard <commit-id-retrieved-using-reflog>
Dieser Trick hat mir ein paar Mal das Leben gerettet.
Die Dokumentation zum Reflog finden Sie HIER .
git reset --hard
einem anderen wiederherzustellen , git reset --hard
aber wenn Sie den --hard
Schalter nicht verwenden , bleiben Einträge in Ihrem Arbeitsbereich übrig, die die gerade wiederhergestellte Arbeit effektiv zurücksetzen würden.
git log
die ID des Commits nicht gesehen. Mit git reflog
konnte ich die Commit-ID sehen
Während ich an einem lokalen Projekt arbeitete, wollte ich es nach GitHub verschieben und dann ein neues Repository erstellen. Während ich versuchte, alle diese Dateien mit .gitignore zum neuen Repository hinzuzufügen, habe ich versehentlich eine falsche Datei hinzugefügt und dann versucht, sie zu löschen.
Ich rannte git reset --hard origin/master
: P.
Dann wurden alle meine lokalen Dateien gelöscht, weil das Repo leer war. Ich dachte alles wäre weg.
Das hat mir das Leben gerettet:
git reflog show
git reset HEAD@{1}
git push
Hoffe, es rettet ein anderes Leben.
git reset HEAD@\{27\}
, danke!
git reflog show
, um zu überprüfen und von diesem ersten Commit verwende ichgit reset HEAD@{number}
Wenn Sie so etwas wie IntelliJ verwenden:
Wählen Sie im Kontextmenü Lokaler Verlauf und klicken Sie im Untermenü auf Verlauf anzeigen:
Die lokale Verlaufsansicht für ein Projekt oder einen Ordner zeigt Ihnen alles, was Sie in den letzten Tagen getan haben. Wählen Sie in der Spalte Aktion im unteren Teil des Dialogfelds die Aktion aus, die Sie zurücksetzen möchten. [...] Dabei zeigt der obere Teil des Dialogfelds die Baumansicht geänderter Dateien. Wenn Sie unabhängig von den anderen seitdem vorgenommenen Änderungen nur die gelöschte Datei wiederherstellen möchten, 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 gerade meinen Arsch aus dem Feuer geholt!
git reflog
hat nicht funktioniert, weil ich die Änderungen nicht übernommen habe. git fsck --lost-found
arbeitete für bereitgestellte Dateien, aber nicht alle wurden bereitgestellt. IntelliJs Local History hat meine nicht gespeicherten Dateien perfekt wiederhergestellt. Ich bin so dankbar für diese Funktion
Ich habe gerade git reset --hard
alle meine nicht festgeschriebenen Änderungen verloren. Zum Glück verwende ich einen Editor (IntelliJ) und konnte die Änderungen aus dem lokalen Verlauf wiederherstellen. Eclipse sollte es Ihnen ermöglichen, dasselbe zu tun.
Per Definition git reset --hard
werden nicht festgeschriebene Änderungen verworfen, ohne dass Git sie wiederherstellen kann (Ihr Backup-System kann helfen, Git jedoch nicht).
Tatsächlich gibt es nur sehr wenige Fälle, in denen git reset --hard
eine gute Idee vorliegt. In den meisten Fällen gibt es einen sichereren Befehl, um dasselbe zu tun:
Wenn Sie Ihre nicht festgeschriebenen Änderungen wegwerfen möchten, verwenden Sie git stash
. Es wird eine Sicherungskopie dieser Änderungen erstellt, die nach einiger Zeit abläuft, wenn Sie ausgeführt werden git gc
. Wenn Sie zu 99,9% sicher sind, dass Sie diese Änderungen nie wieder benötigen, git stash
ist dies immer noch Ihr Freund für den Fall von 0,1%. Wenn Sie 100% sicher sind, dann git stash
ist immer noch Ihr Freund, weil diese 100% einen Messfehler haben ;-).
Wenn Sie Ihre HEAD
und die Spitze des aktuellen Zweigs in der Geschichte verschieben möchten , dann git reset --keep
ist Ihr Freund. Es wird das Gleiche tun wie git reset --hard
, aber Ihre lokalen Änderungen werden nicht verworfen.
Wenn du beides machen willst, dann git stash && git reset --keep
ist dein Freund.
Bringen Sie Ihren Fingern bei, nicht zu benutzen git reset --hard
, es wird sich eines Tages auszahlen.
git stash && git reset --hard
, würde das alle versteckten Inhalte auslöschen, ist das richtig?
git reset --hard
wirft den Vorrat nicht weg. git stash
ist ein Ersatz für git reset --hard
in dem Sinne, dass nicht festgeschriebene Änderungen aus Ihrem Arbeitsbaum entfernt werden, außer dass sie sicher aufbewahrt werden, anstatt sie dauerhaft zu verwerfen.
Wenn Sie ein Commit versehentlich hart zurückgesetzt haben, gehen Sie wie folgt vor:
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
Angenommen, HEAD@{2}
Sie möchten in den Zustand zurückkehren
Dies ist, was ich normalerweise mache, 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 zu Ihren vorherigen Commits zu bewegen, aber die Änderungen, die Sie bisher in Ihrer letzten Commit-Prüfung vorgenommen haben, beizubehalten git reset --soft dadada
Die Informationen gehen verloren.
Da Sie kein Commit durchgeführt haben, hat Ihr .git diese Informationen nie gespeichert. Also, git
kann es im Grunde nicht für Sie wiederherstellen.
Wenn Sie dies gerade getan haben git diff
, gibt es eine Möglichkeit, die Verwendung des Terminalausgangs mit den folgenden drei einfachen Schritten wiederherzustellen.
git diff
. Speichern Sie das O / P in einer Datei namens diff.patchpatch -p1 < diff.patch
) anDu bist gerettet! :) :)
Hinweis: Achten Sie beim Kopieren der Daten vom Terminal in eine Datei darauf, dass die Daten kontinuierlich ausgegeben werden und keine redundanten Daten enthalten (aufgrund des Drückens der Aufwärts- und Abwärtspfeile). Andernfalls könnten Sie es vermasseln.
Ich bin auf dasselbe Problem gestoßen und wurde fast wahnsinnig. Anfangs habe ich das Projekt festgeschrieben und zusammengeführt. Später, als ich versuchte, es git push --set-upstream origin master
auszuführen, bekam ich diesen Fehler
fatal: refusing to merge unrelated histories
Also lief ich git reset --hard HEAD
und es löschte ein 3 Wochen Projekt, aber diese wenigen Befehle unten retten den Tag:
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
hoffe das hilft
Sie können ein Commit zurückerhalten, nachdem Sie a ausgeführt haben reset --hard HEAD
.
Verwenden Sie " git reflog
", um den Verlauf der HEAD
in der Filiale zu überprüfen .
Hier sehen Sie Ihr Commit und seine ID.
Mach a
git reset {commit Id of the commit you want to bring back}
Ich habe auf die harte Tour herausgefunden, dass nicht festgeschriebene Dateien, bevor git reset --hard <commit>
sie aus dem Git-Verlauf entfernt werden. Ich hatte jedoch das Glück, meine Code-Editor-Sitzung während der gesamten Zeit, in der ich mir die Haare auszog, offen zu halten. Dabei stellte ich fest, dass eine einfache control + z
Datei in jeder der betroffenen Dateien den Status der Datei auf die Version vor Git zurückbrachte verbindlich alles zurücksetzen, worum ich nicht speziell gebeten habe.Hooray!!
git reset HEAD@{4}
4 ist Änderungen vor 4 Schritten. Wenn Sie einen richtigen Schritt auswählen, sollte die Liste der Dateien angezeigt werden, die Sie von hard entfernt haben. dann mach:
$ git reflog show
Es zeigt Ihnen den lokalen Commit-Verlauf, den wir bereits erstellt haben. mach jetzt:
$ git reset --hard 8c4d112
8c4d112 ist ein Code, den Sie dort festsetzen möchten. Schauen wir uns https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-history an, um weitere Informationen zu erhalten.
Korrekte Antworten. OK, jetzt mag ich git. :-) Hier ist ein einfacheres Rezept.
git log HEAD@{2}
git reset --hard HEAD@{2}
Wobei "2" die Nummer ist, an der Sie Ihre Änderungen vorgenommen haben. In meinem Fall von einem Kollegen und Chef unterbrochen, um beim Debuggen eines Build-Problems zu helfen. so wurde ein Reset durchgeführt - zweimal hart; HEAD und HEAD @ {1} wurden also überschrieben. Puh, hätte unsere harte Arbeit verloren.
Ich habe versehentlich git reset --hard
das falsche Projekt gemacht (ich weiß ...). Ich hatte gerade an einer Datei gearbeitet und sie war während und nach dem Ausführen des Befehls noch geöffnet.
Obwohl ich nicht festgeschrieben hatte, konnte ich die alte Datei mit der einfachen abrufen COMMAND + Z
.
Referenzantwort von diesem SO,
Nachdem Sie git reflog show ausgeführt haben, sagen Sie, dass Sie 9300f9d festschreiben möchten
Nach dem Ausführen von Git Reset 9300f9d
Sie können den Git-Status ausführen. Anschließend müssen Sie möglicherweise Ihre Datei (en) auschecken, um Ihre Änderungen wiederherzustellen
Git Checkout - Dateipfad / Name
Wenn Sie auf Netbeans entwickeln, schauen Sie zwischen den Registerkarten der Datei und dem Bearbeitungsbereich der Datei. Es gibt eine "Quelle" und eine "Geschichte". In "Verlauf" sehen Sie Änderungen, die mit der Versionskontrolle (git / other) vorgenommen wurden, aber auch Änderungen, die lokal vorgenommen wurden. In diesem Fall können Sie durch lokale Änderungen gerettet werden.
( Antwort geeignet für eine Untergruppe von Benutzern )
Wenn Sie unter (einem neueren) MacOS arbeiten und sich nicht auf Ihrer Time Machine-Festplatte befinden, hat das Betriebssystem stündliche Sicherungen gespeichert, die als lokale Snapshots bezeichnet werden .
Geben Sie Time Machine ein und navigieren Sie zu der Datei, die Sie verloren haben. Das Betriebssystem wird Sie dann fragen:
The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?
Sie sollten in der Lage sein, die verlorenen Dateien wiederherzustellen.
Wenn Sie eine IDE mit demselben Code geöffnet hatten, versuchen Sie, für jede einzelne Datei, an der Sie Änderungen vorgenommen haben, Strg + Z zu drücken. Es hat mir geholfen, meine nicht festgeschriebenen Änderungen nach dem Zurücksetzen des Git wiederherzustellen - hart.
Wenn wir git reset durchführen, wird --hard und alle lokalen nicht festgeschriebenen Änderungen gelöscht. Um die Änderungen wiederherzustellen, klicken Sie in der IDE auf die Datei, vergleichen Sie die Datei mit dem lokalen Verlauf, in dem die Änderungen nach Datum aufgelistet sind, und wir können die Daten wiederherstellen. Dein Tag ist gerettet!
git reset
. Sie brauchen diesen Befehl nicht und er ist gefährlich, verwenden Sie ihn also nicht. Um die Verzweigung entweder zum vorherigen Commit zurückzukehrengit rebase -i
und die nicht gewünschten Commits zugit checkout
löschen oder (den Kopf abzunehmen), gefolgt vomgit branch -M
Verschieben der Verzweigungsspitze. Die erste Datei wird nicht mit lokalen Änderungen ausgeführt, und die spätere Version wird nur ausgeführt, wenn sich die lokal geänderten Dateien zwischen den Versionen nicht unterscheiden.