A única coisa que funcionou para mim foi fazer o checkout do repositório em outra pasta. Suponha que o repositório atual esteja disponível /home/me/current
.
Então eu fiz
git clone /home/me/current /home/me/temp
Isso cria um clone separado do repo em /home/me/temp
Agora posso ir /home/me/temp
e fazer o que quiser. Por exemplo
git reset --hard commit-hash-before-delete
Agora posso copiar a pasta de arquivo excluída de volta
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
E exclua a pasta temporária
rm -rf /home/me/temp
Os exemplos de
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
NÃO FUNCIONA
$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.
Outros exemplos como
git reset --hard HEAD
são destrutivos além de apenas os arquivos excluídos. Quaisquer outras alterações também serão perdidas.
similarmente
git reset --hard some-commit
vai perder qualquer commit após some-commit
git status
lhe dará uma dica sobre quais comandos executar