2010-05-06 4 views
4

Я git noob и git просто удалил кучу важных файлов. Как мне вернуть их?Как восстановить файлы, удаленные git?

У меня есть репо на моей локальной машине. Чтобы попасть в git, я просто щелкнул правой кнопкой мыши папку проекта и выберите «git bash here». Это воспитывает мастера, где я делаю всю свою жизнь.

Так что я имел некоторые изменения в сцене, и я сделал:

git add . 

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

git reset --hard HEAD^ 

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

Как вернуть эти файлы? Если я не могу сделать это через git, есть ли другой путь?

+0

Возможный дубликат http://stackoverflow.com/questions/1108853/recovering-added-file-after-doing-git-reset-hard-head – tanascius

ответ

9

Я стою исправлен относительно моего первоначального совета (см. Историю изменений). В покаянии, я разыскал самый простой способ восстановить потерянные файлы с мерзавцем:

git fsck --lost-found 
ls .git/lost-found/other 

К сожалению, имена файлов будут потеряны, но содержание все должны быть там как отдельные файлы.

+1

Он использовал 'git add .' ... поэтому он должен быть способный восстановить – tanascius

+0

действительно ли fsck влияет на мое репо? потому что я уже сделал: git reset --hard {удален head} , чтобы вернуть некоторые из изменений.но мне все же нужно вернуть мои неуправляемые изменения. – Ryan

+0

Если вы вообще заинтересованы, просто создайте резервную копию всего репо с использованием чего-то другого, кроме git. Но я не думаю, что fsck что-то повредит. –

1

Нет, с

git reset --hard HEAD^ 

эти изменения вернулись к последней фиксации и потерял навсегда.

+1

Он использовал 'git add .' ... поэтому он должен быть в состоянии восстановить – tanascius

0

Из этого SO-Question:


Вы можете (с некоторой работой) восстановить состояние файла в последнем "мерзавцем добавить < файл >". Вы можете использовать

$ git fsck --cached --no-reflogs --lost-found --unreachable HEAD 

, а затем изучить файлы в «.git/lost-found/blob/ каталоге».

Пожалуйста, прочтите git fsck manpage: Я не проверял выше вызова.


1

Это звучит, как вы хотите, старый ГОЛОВА (в отличие от ГОЛОВЫ ^), в этом случае вы можете просто проверить, что пересмотр. Используйте git reflog, чтобы показать предыдущие HEAD, и найдите требуемую фиксацию, затем проверьте ее.

Если вы хотите, чтобы файлы, которые вы поставили перед сбросом, см. В других ответах.

+0

Хороший совет - конечно, reflog поможет восстановить последний коммит ... вместе с моим решением fsck он должен иметь возможность восстановить все файлы. – tanascius