git diff entre dos archivos diferentes


110

En HEAD(la última confirmación), tengo un archivo llamado foo. En mi árbol de trabajo actual, le cambié el nombre a bary también lo edité.

Quiero git diff fooen HEAD, ybar en mi árbol de trabajo actual.


64
Pensé que esta pregunta (del título) podría ser sobre el uso de git diff en dos archivos que no están necesariamente en un repositorio. Descubrí que la marca --no-index es para eso, por ejemplo git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff resalta los cambios por palabra, no solo por línea, lo cual es muy útil para texto largo).
Pat

Respuestas:


135

Especifique las rutas explícitamente:

git diff HEAD:full/path/to/foo full/path/to/bar

Consulte la --find-renamesopción en los git-diff documentos. .

Crédito: twaggs .


9
Quiero mencionar que puede comparar dos archivos cualquiera usando git diff <path> <path>incluso si no están en un repositorio de git.
mitenka

1
@mitenka No creo que eso sea correcto. Si observa git diff --help, verá que los únicos patrones compatibles con dos archivos es git diff [<options>] --no-index [--] <path> <path>. git diff a bsolo coincide con patrones de confirmación, no archivos.
Doug

@Doug Aquí está la cita del comando de ayuda que mencionó, git-scm.com/docs/git-diff : Muestra [...] cambios entre dos archivos en el disco.
Mitenka

@mitenka dice la ayuda, a menos que use '--no-index', no compara archivos; su comentario debe ser una respuesta separada; no es cierto y no es relevante para esta respuesta.
Doug

1
@Doug Gracias por tu opinión. Aquí está la cita de la ayuda a la que hace referencia: Puede omitir la --no-indexopción cuando ejecuta el comando en un árbol de trabajo controlado por Git y al menos uno de los puntos de ruta fuera del árbol de trabajo, o cuando ejecuta el comando fuera de un árbol de trabajo controlado por Git .
mitenka

77

Creo que usar --no-indexes lo que estás buscando:

git diff [<options>] --no-index [--] <path> <path>

como se menciona en el manual de git:

Este formulario es para comparar las dos rutas dadas en el sistema de archivos. Puede omitir la --no-indexopción cuando ejecuta el comando en un árbol de trabajo controlado por Git y al menos uno de los puntos de ruta fuera del árbol de trabajo, o cuando ejecuta el comando fuera de un árbol de trabajo controlado por Git.


1
@swe, esta es definitivamente una respuesta útil, pero el OP indicó específicamente que el archivo está en HEAD, lo que significa que está en un índice git. La respuesta aceptada aborda directamente la pregunta. También la respuesta aceptada tuvo una ventaja de 6 años;)
Michael Delgado

3
Puede que esto no haya ayudado a OP, pero era exactamente lo que estaba buscando.
thislooksfun

Esto responde a la pregunta publicada por el título, si se agachaba por esto en la web.
Merlín

3

Si está usando tortoise git, puede hacer clic con el botón derecho en un archivo y obtener una diferencia: Haga clic con el botón derecho en el primer archivo y, a través del submenú de tortoisegit, seleccione "Diferenciar más tarde". Luego, en el segundo archivo, también puede hacer clic con el botón derecho en este. , vaya al submenú tortoisegit y luego seleccione "Diff with yourfilenamehere.txt"


-12

Usando PhpStorm, simplemente copio el código de confirmación anterior y lo comparo con la versión actual usando la herramienta incorporada "comparar con el portapapeles".


5
PhpStorm es un IDE comercial. Esta pregunta trata sobre cómo hacer esto dentro del propio git cli, sin presunción de software adicional.
Charles Taylor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.