2012-04-22 15 views
6

Ich habe gerade ein neues Repository auf Github gemacht. Beginnend mit einem Ordner voller Dateien, die Schritte, die ich gemacht habe, waren:Git Pull gelöscht nicht festgeschriebene Änderungen

git init 
git add -A 
git remote add origin ... 

#Now pull in the first commit that github made 
git pull origin master 

#Check everything is OK 
ls 

Eek! Alle meine Dateien sind verschwunden! Was ist passiert? Kann ich sie zurückbekommen?

+0

Haben Sie jemals begehen und etwas pushen? Sind die Commits auf GitHub? – ThiefMaster

+0

@TheifMaster: Nein. Ich dachte mir, ich sollte den Initial-Commit von Github einlesen und dann meine Änderungen übernehmen. – Eric

+0

Es gibt kein "initiales Commit". Ein neues Repository hat keine Commits. – ThiefMaster

Antwort

10

Sie können sie zurückbekommen. Obwohl das einzige, was darauf hinwies, war der Index, git add noch den hinzugefügten Inhalt in den Repo. Ich würde mit einem git fsck beginnen, um "dangling" (Git's leicht skurrilen Schreibweise von "unreferenziert") Blobs und git cat-file -p diese Blobs zu finden, wenn es zu viele gibt, würde ich etwas wie find .git/objects -type f | xargs ls -lt tun.

+2

'git fsck --lost-found' ist wahrscheinlich der einfachste Weg nach vorne. –

+3

Da es für einige Leute nicht klar sein kann, haben Sie 'git cat-file -p ' wo das Argument durch den Befehl 'git fsck' ausgegeben wird. – cdmckay

+1

baumelnde Katze-Datei fsck diese Blobs. Es gibt so viele lustige Worte in Git Damm – urmurmur

0

Da Sie die Dateien nie festgeschrieben haben, tut es Ihnen nicht leid. Die Schritte, die Sie ergreifen müssen, sind:

git init 
git add . 
git commit -m 'Initial commit' 
git remote add origin ... 
git push origin master 

Denken Sie daran, im Zweifelsfall immer zu verpflichten. Solange du das tust, kannst du Sachen immer mit git rückgängig machen.

+0

Es ist ein guter Rat, im Zweifelsfall immer zu committen, aber wenn Sie den Anweisungen in der akzeptierten Antwort folgen, können Sie nicht festgeschriebene Dateien wiederherstellen. –

2

Ich stimme der akzeptierten Antwort zu, aber in meinem Fall gab es zu viele Ergebnisse für git fsck. Diese Lösung ist es, was hat mir geholfen, die verlorenen Dateien suchen:

Suche nach einer Zeichenkette in der fehlenden Datei (en):

grep -rin <string_in_missing_file> .git/ 

Zum Beispiel:

grep -rin MyClassName .git/ 

Suchergebnisse:

.git//lost-found/other/3cfaa36226f52a5c1b38c2d2da3912656c998826:5:class MyClassName extends ParentClass 
.git//lost-found/other/e7b8923de4afb230ad523b5b515f50cb9c624248:5:class MyClassName extends ParentClass 

Hier sind die Suchergebnisse:

.git/<path_to_file>:<line_number_of_found_string>:<found_string_and_context> 

Dann die Datei wiederherstellen:

git cat-file -p 3cfaa36226f52a5c1b38c2d2da3912656c998826 > ../<desired_file_path>/MyClassName.php 
Verwandte Themen