Por que “git log -‌- foo” não funciona para o arquivo excluído foo?


89

Meu repositório passou por mudanças como:

  1. ... alguns commits não relacionados ...
  2. Enviar novo arquivo foocom 100 linhas de conteúdo
  3. ... commits intervenientes, alguns dos quais tocam foo...
  4. Insira o conteúdo de foono topo de um arquivo existente bare git rm foono mesmo commit
  5. ... mais commits não relacionados ...

Agora quero ver o log do arquivo excluído foo. Tudo o que li, incluindo no SO, diz que deveria ser possível git log -- foo, mas esse comando não produz nenhuma saída.

Se eu encontrar o commit que inclui a exclusão foo, posso git log 1234abcd -- foover seu log, então acho que meu caminho para foonão é o problema. Observe também que as git merge-base HEAD 1234abcdsaídas 1234abcd[...], então acho que devem provar que o commit está acessível em HEAD. Observe que não há nenhum arquivo fooem minha árvore de trabalho (óbvio, já que foi excluído). Usando Git 1.7.1.1 no OS X.

Por que não git log -- foofunciona para mim e como posso corrigir isso? Obrigado!


5
Você tentou git log --follow -- fooou git log --follow -M -- foo? (para forçar a detecção de renomeação)
VonC

1
Droga, eu tentei - --followmas lendo historyque eu já fiz cd em outro lugar quando tentei, tornando o caminho inválido. git log --follow -- foofuncionou quando tentei do ponto de partida certo. Eu acho que Git considerado rolando fooem barcomo algum tipo de mudança de nome? Em qualquer caso, obrigado! Ficarei feliz em creditar isso se você postar novamente como uma resposta.
user385804

1
Irritante que --é alterado para no título da pergunta ...
Cascabel

Respostas:


118

Você deseja usar a --followopção on git log, que é descrita na página de manual como:

Continue listing the history of a file beyond renames.

Efetivamente, isso não apenas permite que você veja o histórico de um arquivo renomeado, mas também permite que você visualize o histórico de um arquivo que não está mais na árvore de trabalho. Portanto, o comando que você deve usar deve ser semelhante a:

git log --follow -- foo

Atualizar:

Git 2.9+ já permitiu isso por padrão para todos git diffe git logcomandos:

Os comandos de nível de porcelana voltados para o usuário final na família "git diff" e "git log" habilitam por padrão a detecção de renomeação; você ainda pode usar a variável de configuração "diff.renames" para desabilitar isso.

Obrigado a x-yuri pelo aviso!


1
Funcionou para mim sem a --followparte. Eu só precisava adicionar --. Estou correndo git-2.9.0.
x-yuri
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.