Kann das Auschecken nicht bereitgestellter Dateien rückgängig machen

163

Ich verwerfe versehentlich meine Änderungen an Dateien in meinem lokalen Arbeitsbaum über Git Checkout. Die Dateien werden derzeit nicht bereitgestellt. Ist es möglich, diese Kasse "rückgängig zu machen"?

Herr W.
quelle
Nein, können wir nicht, aber wenn Sie Eclipse verwenden, können wir Team -> Local History
USM

Antworten:

105

Ich glaube, wenn eine Datei geändert, aber noch nicht hinzugefügt (inszeniert) wird, ist sie rein "privat".
Das heißt, es kann nicht von GIT wiederhergestellt werden, wenn es mit dem Index oder der HEAD-Version überschrieben wird (es sei denn, Sie haben irgendwo eine Kopie Ihrer aktuellen Arbeit). "

Ein "privater" Inhalt ist nur in Ihrem aktuellen Verzeichnis sichtbar, aber in keiner Weise in Git registriert.

VonC
quelle
5
Ich verstehe, dass Änderungen an einer "privaten" Datei von git nicht rückgängig gemacht werden können. Wenn die Datei jedoch von git geändert wurde (z. B. via git checkout --), würde ich erwarten, dass sie diesen Vorgang rückgängig machen kann, möglicherweise über das reflog. Ist das eine falsche Erwartung?
Ciprian Tomoiagă
2
@CiprianTomoiaga Reflog ist für vergangene nicht referenzierte Commits. Wenn das, was Sie wiederherstellen möchten, nicht festgeschrieben (oder bereitgestellt) wurde, hilft Ihnen das Reflog nicht.
VonC
3
@CiprianTomoiaga Für jede Art von privatem Inhalt (noch nicht hinzugefügt) würden Sie sich ausschließlich auf Ihren Editor oder Ihre IDE-Funktion verlassen. Beispiel für Eclipse: help.eclipse.org/neon/…
VonC
5
Beeindruckend! Unglaublich. Ich musste eine Datei auschecken, also wollte ich tippen git checkout folders/subfolders/file, drückte aber versehentlich die Eingabetaste, nachdem ich foldermeine Arbeit erreicht hatte und sie verloren hatte. / ist 1 cm von der Eingabetaste auf meiner Tastatur entfernt und ich wechsle häufig zwischen Maschinen mit unterschiedlichen Tastaturlayouts, sodass sich meine Finger oft 10 bis 15 Minuten an neue Positionen gewöhnen. Kaum zu glauben, dass Git 2018 Dateien in den Papierkorb wirft, obwohl im Git-Buch steht, dass Git aus dem Weg geht, um keine Arbeit zu verlieren.
Gman
1
@gman Hilft Ihnen die unten stehende Antwort zu "lokaler Verlauf", die von einer IDE bereitgestellt wird, bei der Wiederherstellung Ihrer Arbeit?
VonC
173

Wenn Sie eine "professionelle" IDE verwenden, stehen die Chancen gut, dass Sie Dateien aus einem lokalen Verlauf wiederherstellen können. In Rubymine zum Beispiel können Sie mit der rechten Maustaste auf Dateien klicken und einen Änderungsverlauf unabhängig von den Git-Änderungen anzeigen, der mich jetzt einige Male gespeichert hat ^^

Christoph Geschwind
quelle
36
Zu Ihrer Information, diese Funktion ist in der gesamten JetBrains-Familie "professioneller" IDEs verfügbar: Pycharm, IDEA, PHPStorm, Webstorm. Habe heute meinen Bakken gerettet. Danke, Christoph!
Ben Roberts
6
Ich muss Ihnen danken. Ich benutze WebStorm und habe diese Funktion völlig vergessen, obwohl ich sie ziemlich oft benutze. Ich war so sehr mit dem Verlust von Code beschäftigt, dass ich nicht darüber nachdachte!
Tyson Phalp
8
In Eclipse können Sie mit der rechten Maustaste auf Datei klicken -> vergleichen mit -> lokale Geschichte
Maragues
5
hervorragend. Sublime2 macht auch Änderungen rückgängig, die durch versehentliches Auschecken von Git auf der Festplatte vorgenommen wurden.
Shuckc
8
Wenn jemand feststellt, dass dieser Thread einige Arbeiten in XCode zerstört hat, gibt es eine Möglichkeit, den AutoSave-Verlauf abzurufen. XCode selbst hat keinen Menüeintrag zum Anzeigen des AutoSave-Verlaufs, speichert ihn jedoch. Wenn Sie die betreffenden Dateien in TextEdit öffnen, können Sie den AutoSave-Verlauf unter Datei> Zurücksetzen zurücksetzen und durchsuchen.
Qingu
66

Wenn Sie in einem Editor wie Sublime Text arbeiten und die betreffende Datei noch geöffnet ist, können Sie Strg + Z drücken, um den Status vor dem Auschecken von Git wiederherzustellen.

römisch-römisch
quelle
9
Diese Antwort ist mein Tag gerettet. Vielen Dank!
Feyyaz
Ich bin gerade versehentlich auf dieses Problem gestoßen und wollte gerade eine neue Antwort veröffentlichen. Es sieht so aus, als würde Sublime Git erfassen, indem es den Dateistatus in seinem Dateimodifikationsverlauf ändert.
Timmah
Arbeitete für mich in Ecipse.
Anomalie
4
Arbeitete auch für Visual Studio Code
Intecho
43

Leider gehen Ihre Änderungen verloren. Ihre privaten Änderungen werden einfach überschrieben. Es sei denn, du hast es getangit stash vor dem Auschecken ...

Nehmen Sie es von der helleren Seite: Sie können die Dinge jetzt noch besser umsetzen;)

Marcin Gil
quelle
26

Überprüfen Sie den lokalen Verlauf in Ihrer IDE.

Marcin Szymczak
quelle
Ich habe gerade den Fehler gemacht, meine Änderungen nicht zu inszenieren, und eine Kasse erzwungen. Ich habe meinen lokalen Verlauf in Android Studio überprüft (Ansicht -> Letzte Änderungen) und die zuletzt vorgenommenen Änderungen rückgängig gemacht. Weitere Infos hier jetbrains.com/help/idea/2016.3/…
emen
Dies funktioniert in RubyMine einwandfrei. Das Löschen Ihrer Änderungen wird als "Externe Änderung" bezeichnet. Vielen Dank für diesen Marcin, er hat mir nur eine Stunde verlorene Arbeit erspart!
AndrewSouthpaw
25

Entwickeln unter OS X? Verwenden Sie Xcode? Sie haben wahrscheinlich Glück!

Wie in einem Kommentar von qungu beschrieben , verwaltet OS X einen automatisch gespeicherten Versionsverlauf von Dateien, auch wenn Sie keine Zeitmaschine verwenden .

Wenn Sie also Ihre nicht bereitgestellten lokalen Änderungen mit einem Unachtsamen weggeblasen haben git checkout ., können Sie hier wahrscheinlich Ihre gesamte Arbeit wiederherstellen.

Wenn jemand feststellt, dass dieser Thread einige Arbeiten in XCode zerstört hat, gibt es eine Möglichkeit, den AutoSave-Verlauf abzurufen. XCode selbst hat keinen Menüeintrag zum Anzeigen des AutoSave-Verlaufs, speichert ihn jedoch. Wenn Sie die betreffenden Dateien in TextEdit öffnen, können Sie den AutoSave-Verlauf unter Datei> Zurücksetzen zurücksetzen und durchsuchen.

Das ist großartig und hat sich gestern von einem Arbeitstag für mich erholt.


Sie könnten fragen, "Warum nicht die Git-Befehlszeilen-Benutzeroberfläche, das führende VCS, das für das Software-Engineering in verwendet wird2016 2017 20182019, zumindest Dateien sichern, bevor sie einfach weggeblasen werden? Wie Sie wissen, gut geschriebene Software-Tools für die letzten drei Jahrzehnte. "

Oder fragen Sie sich vielleicht: "Warum ist diese wahnsinnig tolle Dateiverlaufsfunktion in TextEdit verfügbar, aber nicht in Xcode, wo ich sie tatsächlich benötige?"

… Und beide, denke ich, werden Ihnen ziemlich viel über unsere Branche erzählen. Oder vielleicht reparieren Sie diese Tools. Welches wäre super.

Benjohn
quelle
2
Ich kann bestätigen, dass dies funktioniert. Das hat mir nur Stunden Arbeit erspart!
Bruno Rocha
hat bei mir nicht funktioniert, da es sich Modelleider um die Datei handelte
brahimm
@ Brahimm das Modell?
Benjohn
1
Das hat mir nur eine Tonne Herzschmerz erspart. Ich danke dir sehr.
Squarefrog
1
Sehr interessant: Ich habe mit der rechten Maustaste auf meine Quelldatei geklickt und mir das Menü "Öffnen mit" angesehen. Sowohl TextEdit 1.14 als auch TextEdit 1.6 standen zur Auswahl. Nur TextEdit 1.14 hatte die Möglichkeit, auf ältere Revisionen zurückzugreifen. Die Benutzeroberfläche war sehr schön, genau wie TimeMachine.
Bugloaf
6

In VSCODE hat Strg + Z (Rückgängig) für mich funktioniert

Ich tat git checkout .stattdessen git add .und alle meine Dateiänderungen gingen verloren.

Aber jetzt command + zin meinem Mac verwenden, die Änderungen wiederhergestellt und einen Ton der Arbeit für mich gespeichert.

ishab acharya
quelle
Gibt es einen anderen Weg?
Abdul Manan
2

Ein effektiver Retter für diese Art von Situation ist Time Machine (OS X) oder ein ähnliches zeitbasiertes Backup-System. Es hat mich ein paar Mal gerettet, weil ich zurückgehen und nur diese eine Datei wiederherstellen kann.

sscirrus
quelle
1
Lieber Downvoter - können Sie bitte erklären, wie ich diese Antwort verbessern kann?
sscirrus
1

Mir ist das gerade passiert, ich habe einen ganzen Ordner mit stundenlanger Arbeit ausgecheckt! Glücklicherweise fand ich heraus, dass meine IDE Netbeans einen Verlauf jeder Datei führen, sodass ich 99% der Daten wiederherstellen konnte, obwohl ich einige Dinge manuell reparieren musste.

Pierre-Verthume Larivière
quelle
0

Technisch ja. Aber nur in bestimmten Fällen. Wenn Sie zum Beispiel die Codepage geöffnet haben und auf git checkout klicken und feststellen, dass Sie versehentlich die falsche Seite oder etwas anderes ausgecheckt haben. Gehen Sie zur Seite und klicken Sie auf Rückgängig. (für mich Befehl + z), und es wird genau dahin zurückkehren, wo Sie waren, bevor Sie die gute alte Git-Kasse erreicht haben.

Dies funktioniert nicht, wenn Ihre Seite geschlossen wurde und Sie dann auf git checkout klicken. Es funktioniert nur, wenn die eigentliche Codepage geöffnet ist

kdweber89
quelle
0

Wenn Sie mit einer geöffneten Terminal / cmd-Eingabeaufforderung arbeiten und alle git-Befehle verwenden, die die nicht bereitgestellten Änderungen angezeigt hätten (diff , add -p, checkout -p, usw.) und nicht das Terminal / geschlossen cmd prompt , da finden Sie die unstaged Änderungen sind weiterhin verfügbar, wenn Sie nach oben scrollen, wo Sie die oben genannten git-Befehle ausgeführt haben.

Schuh
quelle
0

Kumpel,

Nehmen wir an, Sie sind ein sehr glücklicher Kerl, genau wie ich. Gehen Sie zurück zu Ihrem Editor und machen Sie ein Rückgängigmachen (Befehl + Z für Mac). Sie sollten Ihren verlorenen Inhalt in der Datei sehen. Hoffe es hat dir geholfen. Dies funktioniert natürlich nur für vorhandene Dateien.

codemania23
quelle
-1

Vielleicht gehen Ihre Änderungen nicht verloren. Überprüfen Sie "git reflog"

Ich zitiere den folgenden Artikel:

"Grundsätzlich finden Sie jede Aktion, die Sie in Git ausführen, wo Daten gespeichert sind, im Reflog. Git ist sehr bemüht, Ihre Daten nicht zu verlieren. Wenn Sie also aus irgendeinem Grund glauben , dass dies der Fall ist, können Sie sie wahrscheinlich ausgraben." mit Git Reflog "

Siehe Einzelheiten:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

Robertobado
quelle
3
Machen Sie sich keine Hoffnungen - Reflog hilft nur, wenn Sie auf sinnvolle Weise mit git interagiert haben. Nur eine Datei bearbeiten und dann über eine Git-Kasse wegblasen? Git hatte nie eine Chance.
Bob Gilmore
1
+1 von mir - Ich denke, es lohnt sich, das git refloghier zu erwähnen . Ich fand diese Antwort, als ich nach dem Rückgängigmachen von a suchte git checkout HEAD .- ich wollte tippen git reset HEAD .- ich hatte gerade einen 'git reset --soft HEAD ~ 1' durchgeführt und wusste es nicht über die git reflogso konnte die Arbeit zurückbekommen, die ich getan hatte :)
Russell England
1
Leider sind git checkout <Revision> und git checkout <Pfad> zwei völlig unterschiedliche und nicht verwandte Befehle. Ersteres behält Ihre lokalen Änderungen bei, letzteres nicht.
See