Предварительно: начните с создания резервной копии папки .git/
в root вашего хранилища.
Некоторые операции могут запускать сборку мусора git, что может привести к удалению файлов, к которым вы подключитесь sh восстановить, сделав копию папки .git/
, вы сможете воспроизвести ваши попытки по желанию.
список тайников хранится вместе с reflogs в файле .git/logs/refs/stash
. Убедитесь, что этот файл пуст:
cat .git/logs/refs/stash
run git fsck
, чтобы проверить, отображаются ли в нем ошибки о недействительных объектах.
git fsck
выведет список объектов, которые все еще хранятся где-то в git, но на которые не ссылаются никакие ветви, теги или журналы.
Если вы ищете коммиты более конкретно, выполните:
git fsck | grep commit > dangling-commits.txt
Проверьте каждый из висячих коммитов, чтобы увидеть, видите ли вы там свои спрятанные коммиты.
Например, вы можете запустить:
cat dangling-commits.txt |\
# each line should look like : dangling commit <sha>,
# you want to take the 3rd column
awk '{ print $3 }' |\
# for each hash : run 'git log -1'
xargs -L1 git log -1
You Вы увидите, какие из этих коммитов выглядят как спрятанные коммиты: их сообщение должно выглядеть так:
WIP on [branchname]: [short hash] [commit message]
Вы также увидите дату + время их создания.
Если у вас есть нашел некоторые коммиты, которые вы хотите сохранить, отметьте их тегом или веткой, чтобы git не удалил их случайно:
git tag [some name] [commit hash]
# e.g :
git tag backfromthedead/stash0 [commit hash]