¿Cómo hacer un git diff en el file movido / renombrado?

Moví un file usando git mv . Ahora me gustaría hacer una diferencia en el nuevo file para compararlo con el file anterior (con el nombre antiguo, ahora inexistente).

¿Cómo hago esto?

Necesita usar -M para permitir que git detecte automáticamente el file movido cuando se difiera. Usar solo git diff como mencionó knittl no funciona para mí.

Así que simplemente: git diff -M debería hacerlo.

La documentation para este cambio es:

 -M[<n>], --find-renames[=<n>] Detect renames. If n is specified, it is a threshold on the similarity index (ie amount of addition/deletions companetworking to the file's size). For example, -M90% means git should consider a delete/add pair to be a rename if more than 90% of the file hasn't changed. 

Además de lo que escribió knittl , siempre puedes usar:

 git diff HEAD:./oldfilename newfilename 

donde HEAD:./oldfilename significa oldfilename en la última confirmación (en HEAD), relativo al directory actual.

Si no tienes suficiente nuevo git, deberías usar en su lugar:

 git diff HEAD:path/to/oldfilename newfilename 

Con git 2.9 (junio de 2016), ya no tendrás que agregar -M . git diff usa -M por defecto.

Ver commit 5404c11 , commit 9501d19 , commit a9276a6 , commit f07fc9e , commit 62df1e6 (25 Feb 2016) por Matthieu Moy ( moy ) .
(Fusionado por Junio ​​C Hamano – gitster – en commit 5d2a30d , 03 abr 2016)

diff : activar diff.renames por defecto

Renombrar la detección es una característica muy conveniente, y los nuevos usuarios no deberían tener que excavar en la documentation para beneficiarse de ella.

Las posibles objeciones a la activación de la detección de cambio de nombre son que a veces falla, y a veces es lento. Pero la detección de cambio de nombre ya está activada de forma pnetworkingeterminada en varios casos, como " git status " y " git merge ", por lo que la activación de diff.renames no cambia fundamentalmente la situación. Cuando la detección de cambio de nombre falla, ahora falla constantemente entre " git diff " y " git status ".

Esta configuration no afecta los commands de fontanería, por lo tanto, los guiones bien escritos no se verán afectados.

Las nuevas testings para esta característica están aquí .

Por el motivo que sea usando HEAD:./oldfilename (o ruta absoluta) no funcionó para mí, pero HEAD:oldfilename did (gracias cmn):

 git diff HEAD:oldfilename newfilename git diff 2a80f45:oldfilename f65f3b3:newfilename 

HTH

simplemente ejecute git diff sin ningún argumento, o git diff -- newfilename . git es lo suficientemente inteligente como para comparar los files / contenidos correctos (es decir, contenido original antes de cambiar el nombre con contenido alterado después de cambiar el nombre)