Obtenga el diff en Git para los files que han sido renombrados y luego cambiados significativamente. Esto actualmente no funciona correctamente para mí

Tengo un commit en git que mueve una gran cantidad de files (Git reconoce que estos son movimientos / renombrados), luego otro commit luego de modificar significativamente algunos de estos files.

Todo se muestra como se esperaba en una base de compromiso individual, pero cuando modifico un compromiso antiguo con la última confirmación en la twig, git muestra algunos de estos files como eliminados y luego se agrega.

Si hago el siguiente command, git ve correctamente los cambios de nombre y modifica:

git log --follow --name-status -M branch -- */fileName 

si hago lo siguiente:

 git diff --follow -M branch -- */fileName 

Git me muestra que el file completo se eliminó y luego se volvió a agregar (text rojo y verde).

Creo que lo que está sucediendo es que al hacer un diff, git no pasa por todos los commits sino que compara los primeros contenidos de commit directamente con el último y dado que el file cambió significativamente en un commit no se considera una modificación del original .

¿Hay alguna manera de get una diferencia adecuada de solo lo que ha cambiado sin include explícitamente la ruta antigua y nueva del file a git?

Dado que git no rastrea en realidad los movimientos / renombrados, pero los detecta bajo demanda, git realmente no "sabe" que, por ejemplo, el file a convirtió en some/subdir/z . La opción -M (y algunos otros) para diff y algunos otros commands permiten especificar un umbral para determinar la similitud de files, de modo que, por ejemplo, git diff -M25% a some/subdir/z considerará que some/subdir/z es el resultado de mover a y luego modificarlo si hay al less un 25% de similitud entre los dos. Por supuesto, establecer un umbral bajo podría "identificar" falsamente otros muchos pares de cambio de nombre, así que úselo con cuidado …