Eu apaguei um arquivo com o Git e depois efetuei o commit, então o arquivo não está mais na minha cópia de trabalho. Desejo examinar o conteúdo desse arquivo, mas não realmente restaurá-lo. Como posso fazer isso?
Eu apaguei um arquivo com o Git e depois efetuei o commit, então o arquivo não está mais na minha cópia de trabalho. Desejo examinar o conteúdo desse arquivo, mas não realmente restaurá-lo. Como posso fazer isso?
Respostas:
git show HEAD^:path/to/file
Você pode usar um identificador de commit explícito ou HEAD~npara ver versões mais antigas ou se houve mais de um commit desde que você o excluiu.
fatal: Invalid object name 'HEAD^'.(devo mencionar que tenho apenas "commit inicial")
Se este for um arquivo que você excluiu há um tempo e não deseja buscar uma revisão , você pode usar (o arquivo é nomeado fooneste exemplo; você pode usar um caminho completo):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
A rev-listinvocação procura todas as revisões de, foomas lista apenas uma. Visto que rev-listlista em ordem cronológica reversa, então o que lista é a última revisão que mudou foo, que seria o commit que foi excluído foo. (Isso é baseado na suposição de que git não permite que um arquivo excluído seja alterado e ainda assim permaneça excluído.) Você não pode apenas usar a revisão que rev-listretorna como está porque foonão existe mais lá. Você deve solicitar aquele imediatamente anterior que contém a última revisão do arquivo, portanto, o ^in git show.
**/foose não souber o caminho (isso funcionará para o comando rev-list, mas não para o comando show. No entanto, com o commit do comando rev-list você pode então encontrar o caminho).
Já que você pode não se lembrar do caminho exato, você pode obter o sha1 do git log e então simplesmente emitir
git cat-file -p <sha1>
git whatchanged --no-abbrevisso fornece uma saída semelhante a git (ou svn) log.
path/to/fileé o caminho completo do início do projeto (diretório superior do repositório).