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!)

d -_- b
fonte
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)

JaredMcAteer
fonte
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.

rzrgenesys187
fonte
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
Pau Fracés
fonte
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.

mvp
fonte
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
0

Se você quiser comparar dois arquivos locais no mesmo diretório, use diff.

diff fileA.php fileB.php
Matt Lacey
fonte
Isso não responde à pergunta original
DylanYoung,
-4

Basta usar o diff regular.

diff -Nua fileA.php fileB.php
Peter van der Does
fonte
8
-1 porque "você não pode" está incorreto (consulte: stackoverflow.com/a/13965200/968531 )
NobodysNightmare