git diff dois arquivos no mesmo branch, mesmo commit


97

desculpe se esta pergunta existe, eu surpreendentemente não consegui encontrar: /

Como posso executar um git diffentre dois arquivos dentro do mesmo branch e mesmo commit?

ie git diff fileA.php fileB.php

(de preferência com o código de cores fácil de ler que gitoferece ... ou semelhante ao que o programa BeyondCompare faz!)


Nota: Git: Como comparar dois arquivos diferentes em commits diferentes? é um pouco mais geral do que esta pergunta, mas a resposta é essencialmente a mesma que a resposta correta para esta , e não tem todas essas respostas falsas, então votei para encerrar isso como um ingênuo.
SamB

Respostas:


84

Você não precisa do git para isso, basta usar diff fileA.php fileB.php(ou vimdiff se quiser uma comparação lado a lado)


22
vimdiffpara a vitória! Obrigado!
d -_- b

24
Isso pode funcionar, mas não é git diff. É um formato de saída completamente diferente.
daboross

11
Isso não responde à pergunta original
DylanYoung

8
Eu discordo, o OP não estava claro, mas o fato de ele mencionar BeyondCompare implica que ele não está procurando especificamente por um git diffdiff, mas simplesmente fácil de ler. Além disso, o fato de ele ter aceitado minha resposta como o que estava procurando também indica que ela de fato responde.
JaredMcAteer

3
leia a resposta com atenção. o comando diff fileA fileBnão égit diff fileA fileB
Matthew Hinea

247

Se você deseja usar git diffem dois arquivos arbitrários, você pode usar git diff --no-index <file_a> <file_b>. Os dois arquivos não precisam ser rastreados gitpara que isso funcione.


32
+1, pois responde à pergunta inicial (independentemente de "por que você faria isso" ... pode haver razões)
NobodysNightmare

19
--word-diffdestaca as mudanças por palavra, não apenas por linha
user3148949

2
Para aqueles de nós que usam o PowerShell, esta é uma maneira muito mais fácil de obter uma diferença de dois arquivos em um repo.
Jay Soyer

2
Como esta resposta excelente está listada abaixo de 2 respostas anteriores, com menos votos (e menos úteis) ao classificar por "ativo" ??? Não estou nem contando a resposta marcada como correta. De qualquer forma, obrigado!
j_random_hacker

@daboross No GNU diffutils 3.4+ (2016-08-08), difftem --color, o que pode ajudar (consulte unix.stackexchange.com/a/338960 ). Mas mesmo assim, se estiver usando diff-so-fancy, parece exigir o formato de saída específico de git diff. diff -u(consulte stackoverflow.com/a/4857407/10095231 ) não funciona.
Kelvin

14

Se os arquivos que deseja comparar estão em sua cópia de trabalho, você pode usar simplesmente diffcomo indicado pelos outros, no entanto, se os arquivos estiverem em alguma revisão você pode especificar uma revisão para cada arquivo

git diff <revision_1>:<file_1> <revision_2>:<file_2>

conforme observado aqui: https://stackoverflow.com/a/3343506/1815446

No seu caso (especificando a mesma revisão para ambos os arquivos):

git diff <revisionX>:fileA.php <revisionX>:fileB.php

Observação: uma revisão pode ser HEAD~2um SHA-1, um nome de filial, etc.
ma11hew28

Isso funcionou para mim, apenas comparando nomes de arquivos de dois diretórios diferentes: git diff --name-only HEAD:dir1 HEAD:dir1_backup funciona depois de um git addde ambos os diretórios.
Frank Forte

1
Isso funciona se a revisão não for verificada na árvore de trabalho, ou os arquivos da árvore de trabalho forem modificados e alguém desejar diferenciar os originais, ou se não houver nenhuma árvore de trabalho, como em um repositório git vazio. É uma pena que esta questão altamente avaliada tenha respostas altamente avaliadas que respondem a uma pergunta ainda útil, mas bastante diferente, "como posso obter uma saída como o git-diff sem usar o git?"
TrentP de

4

Para fazer o gnu diff regular se parecer mais com o git diff, eu recomendaria estes parâmetros:

diff -burN file_or_dir1 file_or_dir2

(onde -bignorar espaços, -udiff unificado, -rrecursivo, -Ntratar arquivos ausentes como /dev/null).

Funciona muito bem, mas ainda não tem cores e a paginação automática no estilo git está praticamente ausente. Se você quiser consertar ambos (eu quero), instale colordiffe use-o assim:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Isso fornece saída e interface muito próximas do real git diff.


4
-1 porque "você não pode" está incorreto (consulte: stackoverflow.com/a/13965200/968531 )
NobodysNightmare

Remova o "você não pode", adicione instruções para instalar o colordiff e esta pode ser uma resposta OK para a pergunta original.
DylanYoung


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.