2014-07-23 13 views
6

Ich versehentlich das gesamte Verzeichnis meines Quellcodes entfernt ... mit einem schönen rm-r. Ich weiß, wirklich schlecht; aber glücklicherweise hatte ich ein git repo im containerverzeichnis. So hat Git eine riesige Liste von nicht geänderten Änderungen von gelöschten Dateien. Zum Beispiel:Wiederherstellen gelöschte Datei nicht inszeniert in Git

"deleted: src/caronmonitor/server.py" 

Wie bekomme ich diese Dateien zurück? Es ist die Beratung im gesamten Web zu tun:

git checkout file 

oder

git revert <commit> 

Aber wie ich das verstehen wird die Datei wiederherstellen, um es Zustand auf dem letzten ist begehen. Ich möchte nicht zum letzten Commit zurückkehren, sondern gehe direkt vor dem Löschvorgang zurück. Ich kann in den Gitk schauen und meine Dateien sehen, wie sie vor dem Löschen waren; das muss also möglich sein.

+0

Haben Sie die Datei vor dem Löschen inszeniert? Ansonsten zeigt dir git diff nur den Status des letzten Commit – knittl

+0

Sie wurden nicht inszeniert. Ich habe es vermasselt, ich meine gitk. Also was ist in gitk unter "Lokale nicht festgeschriebene Änderungen, nicht in den Index eingecheckt" was ist das letzte Commit? –

Antwort

3

Nicht, GIT führt keine Magie. Wenn du deine Änderungen nicht inszeniert oder festgelegt hast, sind diese weg. Sie können Löschungen sehen, aber Sie können nur diejenigen in den letzten Zustand zurückversetzen, in dem Sie GIT gesagt haben, es für Sie zu merken.

Sie müssen explizit GIT sagen, um Ihre Änderungen durch Staging und Commit zu erinnern.

Also, wenn Sie in Ihrem Repository mit Inhalt File.txt haben:

int main(argc[] args){ 
     System.out.println("example"); 
    } 

Dies war die letzte Änderung, die begangen wurde oder in Szene gesetzt.

Nun bearbeiten Sie datei.txt wie etwas enthalten:

int main(argc[] args){ 
System.out.println("example"); 
System.out.println("Hey I can print more lines"); 
} 

Sie Ihre Datei speichern, schließen Editor, nichts zu tun mit Git und tun rm -r Nun ist die Datei vorhanden ist und git hat Verweis auf Datei und dass es wurde gelöscht, aber Inhalt dieser Datei in Git ist nur:

int main(argc[] args){ 
     System.out.println("example"); 
    } 
+0

Ich verstehe, dass Git keine Magie macht; aber es scheint, dass in gitk git eine kopie der dateien vor diesem löschen hat. Ich habe auch versehentlich eine einzelne Datei aus einem Git Repo einmal gelöscht und konnte es wiederherstellen, zumindest dachte ich, dass ich es getan habe. –

+0

@ Vance-Turner Ich habe ein kleines Beispiel hinzugefügt, um zu veranschaulichen, wie ich das sehe. – Mateusz

+0

Ah, ich verstehe; vielen Dank. –

8

Ja, tun ein git checkout filename

Wenn Sie mehrere Dateien haben, und wollen sie alle zurück, verwenden Sie wiederherstellen git checkout . aus der Wurzel Ihrer git-Verzeichnis.

Ein Checkout wird die Dateien zur letzten Version wiederherstellen, die hinzugefügt/committed wurde; Wenn eine Datei noch nicht hinzugefügt oder festgeschrieben wurde, ist sie verloren.

So zum Beispiel:

$ git init && touch test1.txt test2.txt test3.txt 
$ git add test1.txt && git commit -m "test1" && git add test2.txt 
$ ls -a 
. .. .git test1.txt test2.txt test3.txt 

#deleting files below, 2 will be recovered, 3rd will be gone. 
$ rm * 
$ ls -a 
. .. .git 

$ git checkout . 
$ ls -a 
. .. .git test1.txt test2.txt 
#test3.txt is gone, test2.txt was recovered, even though not committed but just added 
0

git keine Änderungen gespeichert haben, die nie hinzugefügt oder begangen wurden. Das Beste, was Sie tun können, ist das Auschecken des gelöschten Verzeichnisses, und Sie erhalten es in dem Zustand zurück, in dem es sich befand, als die Dinge zuletzt ausgeführt wurden.

git checkout <branch_you_are_in> <directory_of_all_your_source_code>

Die lokalen unbestätigten Änderungen Sie ist wahrscheinlich die ungebundene Löschung sehen, das heißtgit sieht, dass Sie eine Reihe von Dateien gelöscht haben, aber Sie haben noch nicht zugesichert, dass sie gelöscht sind, also sagt git 'hey, es gibt einige Änderungen (in diesem Fall Löschungen), die Sie nicht begangen haben.'

Verwandte Themen