Eu gostaria de restaurar um diretório inteiro (recursivamente) do histórico do meu repositório git.
Existe apenas 1 ramo (mestre).
Eu sei o commit onde os erros foram incluídos.
Posso usar o hash sha1 do commit pai para restaurar o estado do diretório como estava antes de os erros serem incluídos?
Eu pensei sobre algo assim:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
mas não funcionou.
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Respostas:
tente adicionar '-' entre revisões e caminhos:
E se você quiser recuperar um diretório do commit anterior, você pode substituir o hash do commit por HEAD ~ 1, por exemplo:
fonte
rm -Rf path/to/the/folder
então umgit checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
- Resultado: aquele caminho tinha exatamente os mesmos arquivos daquele commit, sem diferenças e sem arquivos extras que foram criados após este commit. É isso que eu quero.--
faz?Existem duas maneiras fáceis de fazer isso:
Se o commit que incluiu os erros incluiu apenas os erros, use
git revert
para inverter os efeitos dele.Caso contrário, o caminho fácil é este:
git checkout 348…
cp -a path/to/the/folder ../tmp-restore-folder
git checkout HEAD # or whatever
rm -rf path/to/the/folder
mv ../tmp-restore-folder path/to/the/folder
git add path/to/the/folder
git commit -m "revert …"
fonte
Se você simplesmente fizer
git checkout <SHA-ID>
isso, ele o moverá temporariamente para aquele sha-commit.Cada objeto de commit contém toda a estrutura do disco naquele momento, então se você tiver arquivos lá e precisar copiá-los, você pode fazer isso. Porém, advertindo, você não estará em nenhum branch, então você terá que voltar para o master antes de copiar o arquivo em sua árvore de trabalho e submetê-lo.
fonte