Исходя из вывода reflog, я предполагаю, что вы запустили git reset --hard
, после a git add
, но до a git commit
. Это удалит все файлы, которые вы добавили. Вы можете иметь возможность восстановить их содержимое, но не имена файлов.
Вот пример:
$ mkdir treset
$ cd treset
$ git init
Initialized empty Git repository in ..
$ echo '*.pyc' > .gitignore
$ git add .gitignore
$ git commit -m initial
[master (root-commit) bca0228] initial
1 file changed, 1 insertion(+)
create mode 100644 .gitignore
$ echo precious data 1 > file1
$ echo precious data 2 > file2
$ git add .
$ git reset --hard
HEAD is now at bca0228 initial
$ ls
$
Как видите, файлы ценных данных ушел!
Их данные находятся в настоящее время без ссылок Git объекты BLOB-объектов , которые мы можем Git обнаружить и разместить в его каталог lost+found
:
$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
dangling blob 683416f292727f4659d5efa59d068189cf1b43bc
dangling blob f9d4c4040845bb7db25db33ec455d9a0c6703e68
Теперь, чтобы получить обратно content , мы заглядываем внутрь соответствующего каталога (вы можете видеть здесь, я забыл включить other/
в начальный cd
) и проверьте содержимое каждого файла. имена файлов потеряны - они были в индексе, который мы сбрасываем с помощью git reset --hard
, и не сохраняются где-либо еще, но если мы помним, что precious data 1
означает file1
и так далее, мы может mv
вернуть файлы:
$ cd .git/lost-found/
$ ls
other
$ cd other/
$ ls
683416f292727f4659d5efa59d068189cf1b43bc
f9d4c4040845bb7db25db33ec455d9a0c6703e68
$ cat 683416f292727f4659d5efa59d068189cf1b43bc
precious data 1
$ cat f9d4c4040845bb7db25db33ec455d9a0c6703e68
precious data 2
отсюда:
$ mv 683416f292727f4659d5efa59d068189cf1b43bc ../../../file1
$ mv f9d4c4040845bb7db25db33ec455d9a0c6703e68 ../../../file2
возвращает файлы туда, где мы хотим, в рабочем дереве нового репозитория (<em>path/to</em>/treset
в моем случае).