Obtener información acerca de las líneas de fusión git word-diff

Estoy intentando build un historial de file por línea y obtuve un comportamiento extraño en los commands de git diff / git log … cuando uso el modo --word-diff . A veces combina algunas líneas.

Por ejemplo, si la versión anterior del file era:

 r = ioctl(hdev->control, VHOST_SET_LOG_BASE, (uint64_t)(unsigned long)hdev->log); 

se convierte a:

 r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE, hdev->log); 

(Estas líneas son de este proyecto distribuidas con licencia GPL)

Simple git diff me da salida normal (2 líneas eliminadas, una agregada), pero git diff --word-diff me da esto:

 r = [-ioctl(hdev->control,-]{+hdev->vhost_ops->vhost_call(hdev,+} VHOST_SET_LOG_BASE, [-(uint64_t)(unsigned long)hdev->log);-]{hdev->log);} 

La misma salida se emitirá en el modo --word-diff=porcelain , no es un error de modo de text.

Como estoy tratando de get el historial del file por línea, mis methods están fallando en esta parte del git log de git log . Veo que git realmente me está mostrando la mejor diferencia legible para humanos, porque dos líneas después de la edición se convirtieron en una línea, pero no es obvio para las secuencias de commands. Asi que,

  • ¿Este comportamiento es intencional? (git 1.9.1)
  • Si es así, ¿hay alguna forma de get algún resultado adicional sobre estas fusiones (y, si las hay, las unmerges)? No, ¿cómo encontrarlos de otra manera?

Esto se parece a lo que se supone que debe hacer la --word-diff . Git divide los files en palabras (con "" como delimitador) y muestra fragments mínimos. Puedes ver que tus líneas siempre están divididas en espacios.

Intenta usar --word-diff-regex=<regex> con caracteres finales.

En cuanto a la información sobre las fusiones: la culpa de git puede ser útil aquí.