2012-04-22 3 views
6

Я только что создал новый репозиторий на github. Начиная с папки, полной файлов, были выполнены следующие шаги:Git pull deleted uncommitted changes

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! Все мои файлы исчезли! Что случилось? Могу ли я вернуть их?

+0

ли вы когда-нибудь совершить и нажать что-нибудь? Являются ли коммиты на github? – ThiefMaster

+0

@ TheifMaster: Нет. Я решил, что должен выполнить начальную фиксацию из github, а затем выполнить мои изменения поверх этого. – Eric

+0

Нет такой вещи, как «первоначальная фиксация». У нового репозитория нет никаких коммитов. – ThiefMaster

ответ

10

Вы можете вернуть их. Несмотря на то, что единственное, что указывало на это, - индекс, git add по-прежнему помещает добавленный контент в репо. Я бы начал с git fsck, чтобы найти «болтаться» (слегка причудливое написание «unreferenced») git и git cat-file -p эти капли, если их слишком много, я бы сделал что-то вроде find .git/objects -type f | xargs ls -lt.

+2

'git fsck --lost-found', вероятно, самый простой способ продвижения вперед. –

+3

Как это может быть непонятно для некоторых людей, вы делаете 'git cat-file -p ', где аргумент задается командой 'git fsck'. – cdmckay

+1

болтающийся кошачий файл fsck те капли. есть так много смешных слов в git dam – urmurmur

0

Поскольку вы никогда не совершали файлы, не жалели. Вам необходимо предпринять следующие шаги:

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

Помните, что при сомнении всегда совершайте. Пока вы это делаете, вы всегда можете отменить игру git.

+0

Это хорошая рекомендация всегда совершать, когда вы сомневаетесь, но следуя инструкциям в принятом ответе, вы сможете восстановить незафиксированные файлы. –

2

Я согласен с принятым ответом, однако в моем случае было слишком много результатов для git fsck. Это решение, что помогло мне найти потерянные файлы:

поиска строки в недостающем файле (ов):

grep -rin <string_in_missing_file> .git/ 

Например:

grep -rin MyClassName .git/ 

Результаты поиска:

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

Где результаты поиска:

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

Тогда для восстановления файла:

git cat-file -p 3cfaa36226f52a5c1b38c2d2da3912656c998826 > ../<desired_file_path>/MyClassName.php 
Смежные вопросы