Wiederherstellen nach dem Verlust nicht festgeschriebener Änderungen durch “git reset –hard”

Lesezeit: 7 Minuten

Benutzer-Avatar
Jakob Lyles

Gibt es eine Möglichkeit, nicht festgeschriebene Änderungen am Arbeitsverzeichnis von a git reset --hard HEAD?

  • Ich würde empfehlen, zu verlernen git reset. Sie brauchen diesen Befehl nicht und er ist gefährlich, also verwenden Sie ihn nicht. Um entweder zum vorherigen Commit zurückzukehren git rebase -i und lösche die Commits, die du nicht willst oder git checkout (nimmt den Kopf ab) gefolgt von git branch -M um die Astspitze zu bewegen. Die erste wird sich weigern, mit lokalen Änderungen ausgeführt zu werden, und die letztere wird nur ausgeführt, wenn sich lokal geänderte Dateien zwischen den Revisionen nicht unterscheiden.

    – Jan Hudec

    26. April 2011 um 9:10 Uhr

  • @Jan Das glaube ich nicht. Es gibt absolut legitime Gründe, Reset zu verwenden.

    – spaaarky21

    7. Februar 2013 um 16:53 Uhr

  • @spaaarky21: Ja, das gibt es. Aber git reset --hard somewhere ist einer der wenigen wirklich gefährlichen Git-Befehle.

    – Jan Hudec

    8. Februar 2013 um 13:01 Uhr

  • @ Jan Ich stimme zu, aber gefährlich zu sein bedeutet nicht, dass Sie es nicht verwenden sollten. Wissen Sie einfach, was Sie tun, und seien Sie vorsichtig. 🙂

    – spaaarky21

    8. Februar 2013 um 16:47 Uhr

  • Steht in keinem Zusammenhang mit Undoing a git reset –hard HEAD~1, da hier der ursprüngliche Verfasser versucht, nicht festgeschriebene Änderungen wiederherzustellen.

    Benutzer456814

    21. Juli 2013 um 14:55 Uhr

Benutzer-Avatar
Ken

Antwort von diesem SO

$ git reflog show

4b6cf8e (HEAD -> master, origin/master, origin/HEAD) [email protected]{0}: reset: moving to origin/master
295f07d [email protected]{1}: pull: Merge made by the 'recursive' strategy.
7c49ec7 [email protected]{2}: commit: restore dependencies to the User model
fa57f59 [email protected]{3}: commit: restore dependencies to the Profile model
3431936 [email protected]{4}: commit (amend): restore admin
033f5c0 [email protected]{5}: commit: restore admin
ecd2c1d [email protected]{6}: commit: re-enable settings app

# assuming you want to get back to 7c49ec7 (restore dependencies to the User model)

$ git reset [email protected]{2}

Du hast deinen Tag zurück! 🙂

  • Nur um diese Antwort zu ergänzen, würde dies Leuten helfen, die tatsächlich Änderungen vorgenommen haben, die durch einen Hard-Reset verworfen wurden.

    – Murki

    5. August 2014 um 18:18 Uhr

  • Super – aber bei mir waren die Dateien komplett weg. Verwenden git checkout [email protected]{19} erlaubte mir, die verlorenen Dateien in einem getrennten Zustand auszuchecken. Dann verwendet git checkout -b new-branch-name um sie im “angehängten” Zustand wieder zum Repo hinzuzufügen.

    – Nachteule888

    2. Oktober 2016 um 19:29 Uhr

  • @ NightOwl888: Git-Neuling hier und ich hatte das gleiche Problem, dass meine Dateien immer noch weg waren. Könnten Sie genauer erklären, wie Sie Ihre Dateien in einen “angehängten” Zustand zurückversetzt haben (oder können Sie erklären, was das eigentlich bedeutet)? Ich danke dir sehr!

    – OhDaeSu

    14. November 2016 um 18:30 Uhr

  • @user3385759 – Wenn Sie in Git den Checkout-Befehl für etwas verwenden, das kein Zweig ist, wechselt es in einen speziellen “getrennten Kopf”-Modus. Das bedeutet, dass Sie nicht wirklich auf einen Zweig zeigen, aber Sie können sehen, was im Zustand der Entität eingecheckt wurde (in diesem Fall ein Reflog-Eintrag). Von diesem Zustand aus können Sie es in einen “echten” Zweig verwandeln, zu dem Sie durch Verwenden wieder zurückkehren können git checkout -b new-branch-name. Das Buch Pragmatische Versionskontrolle mit Git ist gut darin, Git in einfachen Worten zu erklären.

    – Nachteule888

    14. November 2016 um 19:53 Uhr

  • ken und @NightOwl888 ihr habt gerade drei Tage meines Lebens gerettet! Wünsche dir Glück und Wohlstand!

    – Daniar Abdiev

    27. November 2021 um 13:09 Uhr

Benutzer-Avatar
sehen

Du kann nicht Nicht festgeschriebene Änderungen im Allgemeinen zurückerhalten.

Zuvor inszenierte Änderungen (git add) sollte von Indexobjekten wiederherstellbar sein, wenn Sie dies getan haben, verwenden Sie git fsck --lost-found damit verbundene Objekte zu lokalisieren. (Dies schreibt die Objekte in die .git/lost-found/ Verzeichnis; von dort können Sie verwenden git show <filename> um den Inhalt jeder Datei anzuzeigen.)

Wenn nicht, wäre die Antwort hier: Sehen Sie sich Ihr Backup an. Vielleicht speichert Ihr Editor/IDE temporäre Kopien unter /tmp oder C:\TEMP und so weiter.[1]

git reset [email protected]{1}

Dadurch wird der vorherige HEAD wiederhergestellt

[1] vim z. B. speichert optional dauerhaftes Rückgängigmachen, Finsternis IDE-Speicher lokale Geschichte; Solche Funktionen könnten Ihnen einen ** sparen

  • Der lokale Verlauf von Eclipse – und zusätzlich, da einige Änderungen älter als 6 Tage waren, mein Time Machine-Backup des lokalen Verlaufs von Eclipse! Aus irgendeinem Grund enthielt das Time Machine-Backup des von git verwalteten Ordners nicht meine vorherigen Änderungen.

    – Christian Brodbeck

    31. Mai 2012 um 4:31 Uhr

  • Glücklicherweise habe ich TimeMachine so eingerichtet, dass es jede Stunde ein Backup erstellt, sodass ich die Dateien aus dem letzten Backup schöpfen konnte. Soweit ich das beurteilen kann, werden versteckte Dateien nicht wiederhergestellt, daher sollten Sie die Dateien direkt aus dem Dateisystem kopieren.

    – Gillytech

    13. April 2017 um 20:18 Uhr

  • Die IDE (IntelliJ) speicherte die Änderungen lokal, was den Tag rettete. Danke für den Tipp!

    – progonkpa

    19. Juni 2017 um 20:16 Uhr

  • git reset [email protected]{1} verursachte einen Fehler im resultierenden Powershell-Terminal error: unknown switch ``e' Der Weg, dies zu umgehen, besteht darin, die geschweiften Klammern mit einfachen Anführungszeichen wie folgt zu umgehen: git reset '[email protected]{1}' weil Locken für Powershell eine andere Bedeutung haben

    – Batu

    17. Dezember 2018 um 2:13 Uhr


  • In der Tat rettet der lokale Verlauf in Eclipse (Intellij in meinem Fall) meinen Tag bei der Wiederherstellung unstrage Änderungen, doc hier für Intellij: blog.jetbrains.com/idea/2008/01/…

    – Richard

    25. Januar 2019 um 22:16 Uhr

Benutzer-Avatar
Justin

Ich bin versehentlich gerannt git reset --hard auch heute in meinem Repo, während ich heute auch nicht festgeschriebene Änderungen habe. Um es zurückzubekommen, rannte ich git fsck --lost-foundin die alle nicht referenzierten Blobs geschrieben wurden <path to repo>/.git/lost-found/. Da die Dateien nicht festgeschrieben waren, fand ich sie in der other Verzeichnis innerhalb der <path to repo>/.git/lost-found/. Von dort aus kann ich die nicht festgeschriebenen Dateien mit sehen git show <filename>kopieren Sie die Blobs und benennen Sie sie um.

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 waren, sind sie verloren.

  • Ich habe nur Dateien mit Commit-Referenzen darin lost-found. Aber ich könnte dann tun git show Inhalt zu bekommen.

    – Mitar

    17. September 2013 um 4:28 Uhr


  • Nur um jemandem Zeit zu sparen #!/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

    – rwölst

    22. Oktober 2014 um 14:08 Uhr


Benutzer-Avatar
Gabe

Ja, SIE KÖNNEN sich von einem Hard-Reset WIEDERHERSTELLEN im Git.

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.

Sie finden die Dokumentation von reflog HIER.

Benutzer-Avatar
Orcun

Während ich an einem lokalen Projekt arbeitete, wollte ich es auf GitHub verschieben und habe dann ein neues Repository erstellt. Während ich versuchte, all 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

Dann wurden alle meine lokalen Dateien gelöscht, weil das Repo leer war. Ich dachte, alles wäre weg.

Das hat bei mir funktioniert:

git reflog show
git reset [email protected]{1} 
git push 

Benutzer-Avatar
Escherholz

Wenn Sie 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 rückgängig machen möchten. […] Dabei zeigt der obere Teil des Dialogfensters 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 Wiederherstellen klicken.

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

Das hat gerade meinen Arsch aus dem Feuer geholt!

Benutzer-Avatar
warvariuc

Ich habe es gerade getan git reset --hard und alle meine nicht festgeschriebenen Änderungen verloren. Glücklicherweise verwende ich einen Editor (IntelliJ) und konnte die Änderungen aus der Local History wiederherstellen. Eclipse sollte es Ihnen ermöglichen, dasselbe zu tun.

1019250cookie-checkWiederherstellen nach dem Verlust nicht festgeschriebener Änderungen durch “git reset –hard”

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy