Versehentlich zum Master zurückgekehrt, nicht übernommene Änderungen verloren

Es ist mir gelungen, einen großen Fehler zu machen (an einem Montagmorgen). Arbeiten am Master, vergessen, einen neuen Zweig zu erstellen, Änderungen an den Dateien vorzunehmen, dann versehentlich zum Master zurückzukehren und alle Updates zu verlieren. Ich habe die aktualisierten Dateien nicht übernommen.

Habe ich alle Updates verloren oder kann ich sie abrufen?

Frag mich nicht, denn jedes Mal, wenn ich darüber nachdenke, muss ich mich ins Gesicht schlagen.

Wenn Sie die vorgenommenen Änderungen nicht vorgenommen , in Szene gesetzt oder gespeichert haben , können Sie diese Änderungen nicht wiederherstellen.

Bearbeiten: Wiederherstellen verloren gegangener Änderungen. Hinzufügen auf Mark Longairs Vorschlag (im Kommentar). Dies beinhaltet auch ein paar SO Links von seiner Antwort unten (*), die ich ziemlich informativ fand.

  • Wenn Sie jemals eine Änderung vorgenommen haben und diesen Commit verloren haben (wie in einem getrennten Zustand), können Sie diesen Commit mithilfe von reflog . Sehen Sie diese SO Frage *.

  • Wenn Sie Ihre letzte gestufte Änderung verloren haben, können Sie diese auch wiederherstellen. Sehen Sie diese SO Frage *. (Ich habe es nie selbst benutzt oder probiert).

  • Wenn Sie eine Änderung gespeichert haben, können Sie diese auch mit pop oder apply wiederherstellen. (Ich bin mir nicht sicher, ob die gedrückten / fallen gelassenen Hüllen auch wiederherstellbar sind, die nicht festgeschrieben wurden). Sie können finden, dass Recover fallengelassen in Git nützlich ist.

Wenn es andere Methoden gibt, die jemand vorschlagen kann, würde ich diese Antwort weiter bearbeiten, um sie hinzuzufügen.

Zwei Longshots: Einige IDEs wie Delphi behalten einen Editor-Verlauf. Sie können dort einige Zuflucht nehmen.
Wenn sich Ihr lokales Arbeitsverzeichnis im Ordner MeineDokumente befindet, wurde es möglicherweise automatisch von Windows Home Server, Carbonite, MozyPro usw. gesichert. In der Regel werden diese Einstellungen festgelegt und vergessen. vielleicht hast du es vergessen?

Ich steckte in derselben Situation fest.

Hatte eine Liste der geänderten Dateien im Terminal vor dem –hard reset, ging in meinen Editor (Sublime 2, spielt keine Rolle), öffnete jede Datei und traf cmd + z (rückgängig machen), dies löschte effektiv die Änderungen durch den Hard-Reset gemacht und ich habe meine nicht festgeschriebenen Änderungen zurück 🙂

Die entscheidende Frage ist, was Sie getan haben, nachdem Sie Änderungen an den Dateien vorgenommen haben. Wenn Sie ein Commit erstellt haben, das den neuen Status der Dateien enthielt, sollten Sie sie zurückholen können, indem Sie die letzten Einträge in git reflog , die SHA1sum des Commits finden und dann einen neuen Zweig mit git branch recovered erstellen git branch recovered oder ähnlich. Es gibt ein Beispiel dafür, dies in dieser Antwort zu tun.

Wenn Sie irgendwelche Dateien git add haben, um sie zu inszenieren, sollten Sie sie auch zurückbekommen können, aber das ist mehr Arbeit – Jakub beschreibt, wie man das in dieser Antwort macht .

Wenn du zufällig einen git stash hast, um dir einen sauberen Status zu geben, dann kannst du ihn natürlich genauso zurückbekommen wie jeden anderen Versteck.

Ansonsten habe ich Angst, dass die Nachrichten nicht gut sind.

Ich hoffe, es ist nicht ärgerlich, dies post-hoc zu erwähnen, aber um einfach zum master Zweig zurückzukehren, hättest du keinen Befehl verwenden müssen, der deine Daten verlieren könnte – git checkout master hätte dir gesagt, dass du es bereits warst auf dem Master-Zweig, und zeigen Sie nicht festgeschriebene Änderungen an. (Wahrscheinlich git reset --hard sollte eine “Ja, ich meine das wirklich” Bestätigung haben, wenn es nicht festgeschriebene Änderungen gibt, wenn man bedenkt, wie oft Leute ^W Daten auf diese Weise verlieren.)

Verwenden Sie den Reflog. git reflog zeigt Ihnen eine git reflog aller Ihrer Commits in chronologischer Reihenfolge.

Wenn Sie Ihre Änderungen durch ‘Master-Checking’ verloren haben, arbeiten Sie wahrscheinlich kopflos. git status wird Ihnen sagen, wenn Sie ohne Kopf arbeiten. (Sowie git branch ).

Kopflos zu arbeiten ist gar nicht so schlimm (ich mache es die ganze Zeit bewusst), aber Sie werden sich mehr auf den Reflog verlassen.

Wenn Sie Ihre Änderungen jedoch nicht in irgendeiner Weise übernommen haben, können Sie diese Dateien nicht abrufen. Der einzige realistische Weg, wie dies hätte passieren können, ist, wenn Sie einen Hard-Reset durchgeführt haben oder explizit einen Checkout erzwungen haben. Erzwingen Sie keine Änderungen, es sei denn, Sie sind sicher, dass Sie mit dem Verlust von Daten zufrieden sind.

Normalerweise wird in git das Forcen durch Angabe von -f .

Ich habe das gleiche getan, mehr als einmal leider. Ohne etwas zu begehen hat git keine Ahnung was du geschrieben hast. Selbst wenn du dich verpflichtet hast, wenn ich rückwärts bin, bin ich mir nicht sicher, ob Reflex helfen würde.