Versehentlich auf Master zurückgesetzt, nicht festgeschriebene Änderungen verloren [geschlossen]

73

Ich habe es geschafft, einen großen Fehler zu machen (an einem Montagmorgen). Beim Arbeiten am Master habe ich vergessen, einen neuen Zweig zu erstellen, Änderungen an den Dateien vorgenommen und dann versehentlich zum Master zurückgekehrt, wodurch alle Aktualisierungen verloren gingen. Ich habe die aktualisierten Dateien nicht festgeschrieben.

Habe ich alle Updates verloren oder kann ich sie abrufen?

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

Trist
quelle
In einem Kommentar unten erwähnen Sie, dass Sie Ihre Arbeit über den Stash wiederherstellen können, der automatisch über die GitHub-GUI gespeichert wird. Ich habe die GUI nicht in Aktion gesehen und war immer besorgt darüber, Dinge zu verlieren, mich zu fragen, wie Warnmeldungen aussehen usw. Können Sie Ihre Frage bearbeiten, um zu klären, was tatsächlich ein bisschen mehr passiert ist, damit wir alle davon profitieren können?
Nealmcb
1
Diese Frage sollte erneut geöffnet werden. Es enthält genügend Informationen (ohne Verpflichtung zurückzusetzen), um die Frage zu beantworten (kann ich mah codez plz k thx.)
Rubenvb
3
Sehr geehrte Admins, es erscheint ziemlich bürokratisch, solche Fragen als geschlossen zu markieren. Die akzeptierte Lösung bietet viele Informationen und dies ist ein äußerst allgemeiner Anwendungsfall, auf den jeder stoßen kann. Wenn Sie aufgefordert werden, die Regeln nicht mehr als nötig zu verschärfen, können selbst die naivsten Benutzer die Plattform fragen und nutzen.
Neugieriger Codierer
Warum ist diese Frage Off Topic?
Dr. Dan

Antworten:

86

Wenn Sie nicht hatte begangen , inszeniert oder verstaute die vorgenommenen Änderungen, gibt es keine Möglichkeit, diese Änderungen wiederherstellen können.

BEARBEITEN: Verlorene Änderungen wiederherstellen. Hinzufügen auf Mark Longairs Vorschlag (im Kommentar). Dies beinhaltet auch ein paar SO-Links aus seiner Antwort unten (*), die ich ziemlich informativ fand.

  • Wenn Sie jemals begangen einige Veränderungen und verloren haben , dass begehen (wie in einem frei stehenden Zustand zu begehen), können Sie feststellen , dass mit commit reflog. Siehe diese SO-Frage *.

  • Wenn Sie Ihre zuletzt bereitgestellten Änderungen verloren haben, können Sie diese auch wiederherstellen. Siehe diese SO-Frage *. (Ich habe es nie selbst benutzt oder ausprobiert).

  • Wenn Sie eine Änderung gespeichert haben, können Sie diese auch mit popoder wiederherstellen apply. (Ich bin nicht sicher, ob die geknallten / verworfenen Verstecke auch wiederherstellbar sind, die nicht festgeschrieben wurden). Möglicherweise ist dieses Wiederherstellen des abgelegten Stashs in Git hilfreich.

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

Sailesh
quelle
3
Ihr stashTipp hat mich dazu gebracht, die richtige Vorgehensweise zu finden. Vielen Dank in der Tat
Trist
2
Möglicherweise möchten Sie Ihre Antwort bearbeiten, um darauf hinzuweisen, dass Sie Dateien auch zurückerhalten können, wenn sie nur bereitgestellt wurden, da sie durch diesen Vorgang noch in die Objektdatenbank gestellt werden. (Siehe den zweiten Absatz meiner Antwort.)
Mark Longair
Es wurden einige Punkte zur Wiederherstellung verlorener Änderungen hinzugefügt.
Sailesh
7
Einige IDEs verfolgen den lokalen Dateiversionsverlauf unabhängig von der Quellcodeverwaltung.
Konrad Morawski
1
Wenn Sie an einem Webprojekt arbeiten und die betreffende Datei zufällig in Ihren Browser geladen haben, ist möglicherweise noch eine Kopie dieser Datei im Cache verfügbar (laden Sie die Seite nicht neu, sonst verlieren Sie sie!) um eine verlorene Datei auf diese Weise wiederherzustellen. Siehe sensefulsolutions.com/2012/01/…
JDB erinnert sich noch an Monica
46

Zwei Longshots: Einige IDEs, wie z. B. Delphi, führen einen Editorverlauf. Möglicherweise haben Sie dort einen Rückgriff.
Wenn sich Ihr lokales Arbeitsverzeichnis im Ordner "MyDocuments" befindet, wurde es möglicherweise automatisch von Windows Home Server, Carbonite, MozyPro usw. gesichert. Diese sind normalerweise "Festlegen und Vergessen". Vielleicht hast du es vergessen?

Chris Thornton
quelle
10
Eclipse nennt diese Funktion "lokale Geschichte". Möglicherweise können Sie sogar Dateien wiederherstellen, die nicht bereitgestellt, gespeichert oder festgeschrieben wurden.
Mikko Rantalainen
1
Danke, dass du mir die Idee in den Kopf gesetzt hast !! Ich konnte "gelöschte" Dateien in der Dropbox-Weboberfläche wiederherstellen! Du hast meinen Speck gerettet. Wiederherstellen gelöschter Dateien in Dropbox
Lyonsinbeta
4
Ich habe den gleichen dummen Fehler bei Eclipse gemacht. Ich habe mit der rechten Maustaste auf die geänderte Datei geklickt, die keinen Verlauf anzeigt. Aber wenn ich mit der rechten Maustaste klicke-> Ersetze durch-> Lokalverlauf ... sehe ich eine Liste der Änderungen. Das hat mich gerettet. Hoffe das hilft jemandem.
Rahul Dabas
4
VIELEN DANK FÜR IHRE ANTWORT!!!! Ich bin unendlich dankbar für Ihre Antwort. PHPStorm verfügt über ein VCS -> Local History für einzelne Dateien, die von Git unabhängig sind. Ich habe früher einen sehr dummen Fehler gemacht, der dazu führte, dass meine nicht festgeschriebenen Änderungen verloren gingen. Es waren ungefähr drei Arbeitstage. Ich danke dir sehr!!!!!!!!!!!!!!!!!!!!!
TheGreenCabbage
2
Ich war fast in Tränen aufgelöst, Ihre Antwort hat mir Leben gerettet, dank Eclipse Ide: D
Freelancer
19

Ich war in der gleichen Situation gefangen.

Hatte vor dem --hard-Reset eine Liste der geänderten Dateien im Terminal, ging in meinen Editor (Sublime 2, spielt aber keine Rolle), öffnete jede Datei und drückte einmal auf cmd + z (Rückgängig), wodurch die Änderungen effektiv rückgängig gemacht wurden Nach dem Hard-Reset habe ich meine nicht festgeschriebenen Änderungen zurückbekommen :)

Vishu
quelle
Das gleiche funktionierte für mich in VS Code.
Monsignore
1
Du bist der Mann!
Renato Sanhueza
10

Die entscheidende Frage hier 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 enthält, sollten Sie in der Lage sein, diese git reflogwiederherzustellen, indem Sie die letzten Einträge in durchsuchen, die SHA1-Summe des Commits ermitteln und daraus einen neuen Zweig mit git branch recovered <SHA1sum>oder ähnlichem erstellen . In dieser Antwort finden Sie ein Beispiel dafür .

Wenn Sie git addeine der Dateien bearbeitet haben, um sie zu inszenieren, sollten Sie sie auch zurückbekommen können, aber das ist eher mehr Arbeit - Jakub beschreibt in dieser Antwort, wie das geht .

Wenn Sie einen Fehler gemacht haben git stash, um sich einen sauberen Status zu verschaffen, können Sie ihn natürlich wie jeden anderen Vorrat zurückerhalten.

Ansonsten befürchte ich, dass die Nachrichten nicht gut sind.

Ich hoffe, es ist nicht ärgerlich, post-hoc darauf hinzuweisen, aber um einfach zum masterZweig zurückzukehren, hätten Sie keinen Befehl verwenden müssen, der Ihre Daten verlieren könnte - git checkout masterhätte Ihnen gesagt, dass Sie bereits im Hauptzweig waren und zeigen Sie alle nicht festgeschriebenen Änderungen an. (Sollte git reset --hardwohl die Bestätigung "Ja, ich meine das wirklich" haben, wenn es nicht festgeschriebene Änderungen gibt, wenn man bedenkt, wie oft ^Wich Daten auf diese Weise verliere.)

Mark Longair
quelle
Die Bash-Befehlszeile hat mich damals nicht gefragt git reset --hard HEAD~1. Alle nicht bereitgestellten nicht festgeschriebenen Änderungen waren verschwunden. Keine Fragen gefragt.
Robert Koritnik
2
@RobertKoritnik Ich glaube, Sie haben den letzten Satz meiner Antwort falsch verstanden - ich sagte, dass ein "Sind Sie sicher?" Die Bestätigung, wann git reset --hardDaten verloren gehen könnten, wäre eine gute Funktion, nicht dass Git dies tut.
Mark Longair
3

Verwenden Sie das Reflog. git reflogzeigt Ihnen in chronologischer Reihenfolge eine Historie aller Commits, an denen Sie teilgenommen haben.

Wenn Sie Ihre Änderungen durch Auschecken des Masters verloren haben, haben Sie wahrscheinlich kopflos gearbeitet. git statuswird Ihnen sagen, ob Sie ohne Kopf arbeiten. (Wie auch git branch).

Kopflos arbeiten ist nicht so schlecht (ich mache es die ganze Zeit absichtlich), aber Sie werden sich stärker auf das Reflog verlassen können.

Wenn Sie Ihre Änderungen jedoch in keiner Weise festgeschrieben haben, können Sie diese Dateien nicht abrufen. Dies wäre nur realistisch, wenn Sie einen Hard-Reset durchgeführt oder eine Kasse explizit erzwungen hätten. Erzwingen Sie keine Änderungen, es sei denn, Sie sind sicher, dass Sie mit dem Verlust von Daten zufrieden sind.

Normalerweise erfolgt das Erzwingen in git durch Angabe -f.

Arafangion
quelle
Vielen Dank für die schnelle Antwort, konnte ref im Reflog nicht finden, aber höchstwahrscheinlich habe ich es falsch gemacht. Benutzte GitX und fand ein Versteck, knallte das.
Trist
1

Ich habe das leider mehr als einmal getan. Ohne irgendetwas zu begehen, hat git keine Ahnung, was du geschrieben hast. Selbst wenn Sie sich dann rückwärts verpflichten würden, bin ich mir nicht sicher, ob Reflex helfen würde.

matthewdaniel
quelle
1
Vielen Dank für die schnelle Antwort. Ich habe die GitHub-Benutzeroberfläche ausprobiert, eine dumme Sache, die man bei Produktionssachen machen kann, aber los geht's. Es scheint, dass es einen <code> Stash </ code> ausgeführt hat, bevor ich den Schaden zugefügt habe.
Trist
Ich bin froh zu hören, dass du mehr
Glück
@Trist Das hat es für mich getan. Ich wollte GitHub verfluchen, weil es so einfach war, den Zweig ohne Commit zu wechseln (und keine sichtbare Stash-Funktion in der GUI), als ich Ihren Kommentar sah. git stash applyrettete den Tag.
John