Obtener diff (o git diff) para mostrar trozos insertados adecuadamente

Digamos que tengo dos files. El primero tiene los contenidos:

line 1 foo line 2 line 1 bar line 2 

Y el segundo tiene una nueva sección insertada en el medio, por lo que se ve así:

 line 1 foo line 2 line 1 new text line 2 line 1 bar line 2 

Ahora, cuando hago un "diff -u", obtengo una salida como esta:

 --- file1 2013-06-25 16:27:43.170231844 -0500 +++ file2 2013-06-25 16:27:59.218757056 -0500 @@ -1,7 +1,11 @@ line 1 foo line 2 line 1 +new text +line 2 + +line 1 bar line 2 

Esto no refleja adecuadamente que se insertó la estrofa del medio, sino que hace que parezca que se cambió la segunda estrofa y se agregó una nueva al final (esto se debe a que el algorithm comienza en la primera línea diferente).

¿Hay alguna forma de get diff (ya sea solo o usando git diff) para mostrar esta salida?

 --- file1 2013-06-25 16:27:43.170231844 -0500 +++ file2 2013-06-25 16:27:59.218757056 -0500 @@ -1,7 +1,11 @@ line 1 foo line 2 + +line 1 +new text +line 2 line 1 bar line 2 

Esto es principalmente un problema cuando se genera un parche para que alguien lo revise, donde una nueva function se inserta en un grupo de funciones similares. El comportamiento pnetworkingeterminado no refleja lo que realmente cambió.

El algorithm diff de paciencia ( git diff --patience ) puede brindarle resultados más naturales, aunque no en todos los casos.

Git 2.9 fue lanzado a principios de este año que incluía la bandera experimental --compaction-heuristic en el command git diff :

En 2.9, el motor de diferencias de Git aprendió una nueva heurística: trata de mantener los límites del trozo en líneas en blanco, moviendo el trozo "hacia arriba" siempre que la parte inferior del trozo coincida con la parte inferior del context anterior, hasta que lleguemos a una línea en blanco.

No creo que GitHub lo tenga habilitado para diffs en la interfaz de usuario web para requestes de extracción y comparaciones, pero puede hacerlo localmente. Recomiendo usarlo junto con --word-diff si necesitas ese nivel de granularidad.

Más detalles disponibles en el blog de GitHub: https://github.com/blog/2188-git-2-9-has-been-released

En ciertos casos, el command git diff --word-diff (o –color-words) puede darle mejores resultados