Mudei um arquivo usando git mv
. Agora eu gostaria de fazer uma diferença no novo arquivo para compará-lo com o arquivo antigo (com o nome antigo, agora inexistente).
Como eu faço isso?
git
diff
file-rename
mv
dr jerry
fonte
fonte
git diff -- yourRenamedFile
será suficiente. Veja minha resposta abaixoRespostas:
Você precisa usar -M para permitir que o git detecte automaticamente o arquivo movido durante a difusão. Usar apenas
git diff
como mencionado não funciona para mim.Tão simplesmente:
git diff -M
deve fazê-lo.A documentação para esta opção é:
fonte
~/.gitconfig
?git diff
. A execuçãogit diff -M
em um único arquivo (renomeado) não informa uma renomeação.git log --follow -- file_after_move.txt
funciona bem. Ele mostra toda a história, inclusive antes da mudança. Alguma ideia? Estou executandogit version 2.11.0.windows.1
.-C
opção para detectar cópias é útil e semelhante. Usei-o-M
para 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:
onde
HEAD:./oldfilename
significa oldfilename no último commit (em HEAD), relativo ao diretório atual.Se você não tiver um git novo o suficiente, teria que usar:
fonte
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
para o diretório e não adicionar--
antes docommit:path
par. 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á
-M
mais adicionar .git diff
usa-M
por 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)Os novos testes para esse recurso estão aqui .
fonte
git diff -M
ativa 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:Nesse caso, defina a opção de configuração conforme sugerido pelo git, por exemplo
e execute novamente o seu comando diff.
fonte
Por qualquer motivo, usar
HEAD:./oldfilename
(ou caminho absoluto) não funcionou para mim, masHEAD:oldfilename
funcionou (obrigado cmn):HTH
fonte
HEAD:./oldfilename
?simplesmente execute
git diff
sem argumentos, ougit 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)fonte
git mv
inserir 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-M
seja usado.