git diff dos archivos en la misma rama, misma confirmación

97

lo siento si existe esta pregunta, sorprendentemente no pude encontrarla: /

¿Cómo puedo realizar una git diffentre dos archivos dentro de la misma rama y la misma confirmación?

es decir git diff fileA.php fileB.php

(idealmente con la codificación de colores fácil de leer que gitofrece ... ¡o similar a lo que hace el programa BeyondCompare!)

d -_- b
fuente
Nota: Git: ¿Cómo diferenciar dos archivos diferentes en diferentes confirmaciones? es un poco más general que esta pregunta, pero la respuesta es esencialmente la misma que la respuesta correcta a esta , y no tiene todas esas respuestas falsas, por lo que he votado para cerrar esto como una trampa.
SamB

Respuestas:

84

No necesitas git para eso, solo usa diff fileA.php fileB.php(o vimdiff si quieres una comparación lado a lado)

JaredMcAteer
fuente
22
vimdiff¡por la victoria! ¡Gracias!
d -_- b
24
Esto puede funcionar, pero no es git diff. Es un formato de salida completamente diferente.
daboross
11
Esto no responde a la pregunta original
DylanYoung
8
No estoy de acuerdo, el OP no estaba claro, pero el hecho de que mencione BeyondCompare implica que no está buscando específicamente una git diffdiferencia, sino simplemente una fácil de leer. Además, el hecho de que aceptó mi respuesta como lo que estaba buscando también indica que, de hecho, la responde.
JaredMcAteer
3
lea la respuesta con atención. el comando diff fileA fileBno esgit diff fileA fileB
Matthew Hinea
247

Si desea utilizar git diffen dos archivos arbitrarios, puede utilizar git diff --no-index <file_a> <file_b>. No es necesario realizar un seguimiento de los dos archivos gitpara que esto funcione.

rzrgenesys187
fuente
32
+1 ya que responde a la pregunta inicial (independientemente de "por qué harías eso" ... puede haber razones)
NobodysNightmare
19
--word-diffdestaca los cambios por palabra, no solo por línea
user3148949
2
Para aquellos de nosotros que usamos PowerShell, esta es una forma mucho más fácil de obtener una diferencia de dos archivos en un repositorio.
Jay Soyer
2
¿Cómo se muestra esta excelente respuesta a continuación 2 respuestas anteriores, con menos votos (y menos útiles) cuando se clasifican por "activo"? Ni siquiera estoy contando la respuesta marcada como correcta. ¡Gracias de todos modos!
j_random_hacker
@daboross En GNU diffutils 3.4+ (2016-08-08), difftiene --color, lo que podría ayudar (consulte unix.stackexchange.com/a/338960 ). Pero incluso entonces, si se usa diff-so-fancy, parece requerir el formato de salida específico de git diff. diff -u(consulte stackoverflow.com/a/4857407/10095231 ) no funciona.
Kelvin
14

Si los archivos que desea comparar están en su copia de trabajo, puede usarlos simplemente diffcomo señalan los demás, sin embargo, si los archivos están en alguna revisión, puede especificar una revisión para cada archivo.

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

como se indica aquí: https://stackoverflow.com/a/3343506/1815446

En su caso (especificando la misma revisión para ambos archivos):

git diff <revisionX>:fileA.php <revisionX>:fileB.php
Pau Fracés
fuente
Nota: Una revisión puede ser HEAD~2, un SHA-1, un nombre de rama, etc.
ma11hew28
Esto funcionó para mí, simplemente comparando nombres de archivos de dos directorios diferentes: git diff --name-only HEAD:dir1 HEAD:dir1_backup funciona después de uno git addde ambos directorios.
Frank Forte
1
Esto funciona si la revisión no se comprueba en el árbol de trabajo, o si los archivos del árbol de trabajo se modifican y uno desea diferenciar los originales, o si no hay ningún árbol de trabajo, como en un repositorio git simple. Es lamentable que esta pregunta altamente calificada tenga respuestas altamente calificadas que responden a una pregunta todavía útil, pero bastante diferente, "¿cómo puedo obtener una salida similar a git-diff sin usar git?"
TrentP
4

Para hacer que gnu diff se parezca más a git diff, recomendaría estos parámetros:

diff -burN file_or_dir1 file_or_dir2

(donde -bignorar espacios, -udiff unificado, -rrecursivo, -Ntratar los archivos faltantes como /dev/null).

Funciona muy bien, pero aún no tiene colores y la paginación automática de estilo git está prácticamente ausente. Si desea arreglar ambos (yo lo hago), instálelo colordiffy úselo así:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Esto proporciona una salida y una interfaz muy parecidas a las reales git diff.

mvp
fuente
4
-1 porque "no puedes" es incorrecto (consulta: stackoverflow.com/a/13965200/968531 )
NobodysNightmare
Elimine el "no puede", agregue instrucciones para instalar colordiff y esta podría ser una buena respuesta a la pregunta original.
DylanYoung
0

Si desea diferenciar dos archivos locales en el mismo directorio, simplemente use diff.

diff fileA.php fileB.php
Matt Lacey
fuente
Esto no responde a la pregunta original
DylanYoung