Respostas:
Você precisa usar -M para permitir que o git detecte automaticamente o arquivo movido durante a difusão. Usar apenas git diffcomo mencionado não funciona para mim.
Tão simplesmente: git diff -Mdeve fazê-lo.
A documentação para esta opção é:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
~/.gitconfig?
git diff. A execução git diff -Mem um único arquivo (renomeado) não informa uma renomeação.
git log --follow -- file_after_move.txtfunciona bem. Ele mostra toda a história, inclusive antes da mudança. Alguma ideia? Estou executando git version 2.11.0.windows.1.
-Copção para detectar cópias é útil e semelhante. Usei-o -Mpara olhar para um diff em que havia refatorado um arquivo em dois (sem nenhum nome correspondente ao original).
Além do que knittl escreveu , você sempre pode usar:
git diff HEAD:./oldfilename newfilename
onde HEAD:./oldfilenamesignifica oldfilename no último commit (em HEAD), relativo ao diretório atual.
Se você não tiver um git novo o suficiente, teria que usar:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cdpara o diretório e não adicionar --antes do commit:pathpar. O Git parece ser muito exigente com sintaxe aqui.
<commit-ish>:<pathname>sintaxe é um identificador de objeto, algo como Git-ish; depois que o --Git espera apenas nomes de arquivos.
Com o git 2.9 (junho de 2016), você não precisará -Mmais adicionar . git diffusa -Mpor padrão.
Consulte commit 5404c11 , commit 9501d19 , commit a9276a6 , commit f07fc9e , commit 62df1e6 (25 de fevereiro de 2016) por Matthieu Moy ( moy) .
(Mesclado por Junio C Hamano - gitster- na confirmação 5d2a30d , 03 de abril de 2016)
diff: ativardiff.renamespor padrãoA detecção de renomeação é um recurso muito conveniente, e os novos usuários não precisam procurar na documentação para se beneficiar.
As possíveis objeções à ativação da detecção de renomeação são que, às vezes, falha e às vezes é lento. Mas a detecção de renomeação já está ativada por padrão em vários casos como "
git status" e "git merge", portanto, a ativaçãodiff.renamesnão altera fundamentalmente a situação. Quando a detecção de renomeação falha, ela agora falha consistentemente entre "git diff" e "git status".Essa configuração não afeta os comandos de encanamento, portanto, scripts bem escritos não serão afetados.
git diff -Mativa a detecção de renomeação como outros disseram (e como o @VonC apontou, ela é ativada por padrão no git 2.9). Mas se você tiver um grande conjunto de alterações, a detecção inexata de renomeação ainda poderá ser desativada novamente. O Git exibirá um aviso como o seguinte, fácil de perder em meio ao diff que você está visualizando:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
Nesse caso, defina a opção de configuração conforme sugerido pelo git, por exemplo
git config diff.renamelimit 450
e execute novamente o seu comando diff.
Por qualquer motivo, usar HEAD:./oldfilename(ou caminho absoluto) não funcionou para mim, mas HEAD:oldfilenamefuncionou (obrigado cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename?
simplesmente execute git diffsem argumentos, ou git diff -- newfilename. O git é inteligente o suficiente para comparar os arquivos / conteúdos corretos (ou seja, conteúdo original antes de renomear com conteúdo alterado após renomear)
git mvinserir um único arquivo e comparar o estado faseado com outro ramo idêntico produzirá a diferença "tudo foi excluído e recriado novamente", a menos que -Mseja usado.
git diff -- yourRenamedFileserá suficiente. Veja minha resposta abaixo