2016-04-04 7 views
0

Ich habe eine große Anzahl von Dateien für das Commit inszeniert.Gibt es eine Möglichkeit, ein "Git Reset" rückgängig zu machen? Es hat alle Dateien "zurückgesetzt" - alle Änderungen sind aus meinem Arbeitsverzeichnis verschwunden.

Dann erkannte ich, dass es besser war, nur zwei der Dateien zu committen, und dann die restlichen in einem separaten Commit zu committen.

git reset <filename> unstages Dateiname

Ich wollte alles unstage,
dann zwei Dateien reinszenieren und begehen.
Dann alle Remainging-Dateien und Commit erneut durchführen.

As: "git add ." (fügt alle Dateien auf Staging-Bereich)
und "git reset <filename>" (entfernt Dateinamen aus Staging-Bereich)
"git reset ." (schien Sinn zu machen, alle Dateien unstage)

oops ..!
Das hat mein Arbeitsverzeichnis auf die letzte festgeschriebene Version zurückgesetzt,
- Ich verlor ALLE Dateiänderungen, die ich gemacht hatte! :-(

Auf jeden Fall auf „Undo“ „git reset .git reset .“ überhaupt „??

Ich habe nicht ich keine Dokumentation zu diesem Thema.
In der Tat nicht finden jede Dokumentation gefunden“.
Meine beste Vermutung ist, dass git die „.“ nahm der Wert für eine Option, andere als die Dateinamen Option.

Aber ist dies rückgängig gemacht werden?

+0

Zur Dokumentation auf git reset Typ 'git reset --help' - es könnte die Bit-Lesen über' git reset --soft' –

+0

wert sein 'git reset .' nicht oder zurückgesetzt ändern Verzeichnis in jeder Arbeits Weg. Es wird nur das Staging von Dateien rückgängig gemacht. Wenn Sie jedoch 'git reset --hard.' zurückgeben, ist das eine andere Geschichte ... – eis

+0

' git reset' ohne '--hard' sollte nicht-destruktiv sein. – Peter

Antwort

0

Ja!, Es stellt sich heraus, Sie können !! Hier

Deshalb: git interpretiert git reset . als git reset --hard

, so dass alle Änderungen in meinem Arbeitsverzeichnis gelöscht, alles in den Zustand meiner letzten Zurücksetzen begehen.

Es gibt keine eingebaut in Weg, um die Dateiänderungen wiederherzustellen, die ich verloren hatte.
git add . speicherte jedoch eine Kopie jeder Datei, in der diese Änderungen enthalten waren.
Wir, müssen nur einen Griff auf, wo/wie git den Zustand der genannten Dateien gespeichert.

Kurz gesagt, führen Sie die folgenden Schritte durchführen:

(1):
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") \ $(egrep commit all | cut -d ' ' -f 3) > stagedNotCommitted

Diese finden und eine Liste von Dateien setzen, die git indiziert wurde (weil sie gewesen war staged),
, die aber nie in eine Datei mit dem Namen stagedNotCommitted

versetzt wurden

Da Git die Dateinamen für diese Dateien nicht kennt, wird stagedNotCommitted eine Auflistung der Hashes der indizierten Dateien sein. suchen so etwas wie

`369c722e8df1c83b6ebfc0dc2d426aa612535203 
    63282280da679aa19d6a2a71e08bed8487f7e688 
    6a540aa36ee558611528176dbf87ad8e39475222 
    9c8ce87dd8aff2abc78d8a5dbe976473c6fea3de 
    9e20a6530229dac42cb87dc0a7153edb4bad96b5 
    abec86bc81f8b473e5ea8f0320589619d5e726b2 
    b830a382cd30308782a1df12e553227100b47ba4 
    c8bc4788fee301c8c88ed29739927689742c55bf 
    f87c9f32da264e5e0b9de3d1818e291a687adab9` 
    ...  

(2):
Von hier aus können Sie jede Datei in einem Texteditor öffnen (I verwendet Sublime), und speichern die, die Sie wollen unter dem richtigen Namen erholen.

So wie ich darüber ging, war durch jeden „nicht erreichbar Blog“ in eine temporäre Datei als solche zu speichern:

$ git show 89f45 > _02_89f45 $ git show 07f9c > _03_07f9c $ git show 23ad5 > _04_23ad5

(Sie nur die ersten Ziffern für jede Datei verwenden können). ..

Von dort war das Öffnen all dieser Dateien in erhabenen war einfach.

Nur Speichern mit dem entsprechenden Namen.

Fertig !! :-)

Hinweis, dies funktioniert nur, weil ich bereits inszeniert hatte Alle Dateien, die ich wiederherstellen wollte.
Hätte ich sie nicht inszeniert, hätte ich Glück gehabt. (Oder konnten nur einige von ihnen erholen.)

Weitere Informationen finden Sie unter den folgenden Links I nützlich auf Stackoverflow gefunden:

Dieses ist besonders nützlich, mit einer großen Erklärung!
Undo git reset --hard with uncommitted files in the staging area

Andere:
Gut, gut erklärt Info:
How can I undo git reset --hard HEAD~1?

Dieses hat auch einen Beitrag ein Plugin verknüpft, die es für Sie tun behauptet:
Recovering added file after doing git reset --hard HEAD^

Schließlich Hier ist eine interessante Tabelle:
https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/summary

Command Scope Common use cases git reset Commit-level Discard commits in a private branch or throw away uncommited changes git reset File-level Unstage a file git checkout Commit-level Switch between branches or inspect old snapshots git checkout File-level Discard changes in the working directory git revert Commit-level Undo commits in a public branch git revert File-level (N/A)

2

Sie nie diese Änderungen festgelegt, also nein, es ist nicht possib le ...

Rest versichern, dass ich weiß, wie sich Ihr Schmerz anfühlt ... und die gute Nachricht ist, dass Sie diesen Fehler nie wieder machen werden!

+0

Eigentlich gibt es ** einen Weg, dies zu tun. Weitere Informationen finden Sie unter Akzeptierte Antwort. – SherylHohman

Verwandte Themen