Поскольку вы добавили файлы, git все еще должен иметь след их содержимого.
Выполнить:
git fsck --full --unreachable --no-reflog | grep blob
Это даст вам список хэшей, каждый из которых указать на большой двоичный объект (содержимое файла). К сожалению, имена файлов не сохраняются, поэтому вам нужно будет понять, какой blob нужно восстановить, и найти их имена обратно.
Вот способы разобраться из этих хэшей:
Вы можете просмотреть содержимое большого двоичного объекта:
git show <sha>
# restoring a blob is just :
git show <sha> > filename
Если вы помните определенное c слово или инструкцию в файле, вы можете использовать git grep <string> <sha>
в список капель:
$ git fsck --full --unreachable --no-reflog | grep blob | awk '{ print $3 }' > list.txt
$ cat list.txt | while read blob; do
if git grep -q "string" $blob; then
echo $blob
fi
done
Вы можете использовать трюк, чтобы отсортировать их по дате модификации (которая должна быть: моментом добавления)
# using the same list.txt as above :
cat list.txt |\
sed -e 's|^\(..\)\(.*\)|.git/objects/\1/\2|' |\
xargs ls -l -t 2> /dev/null
(дополнительные объяснения для этого трюк в этом ТАК вопросе )