Existe diferencia entre confirmaciones, pero el logging de git no muestra cambios

Tengo una situación curiosa y no la entiendo.

Cuando uso git log -p -<n> No veo cambios en lo que existe en el file, pero si pruebo git diff <prev>..<next> <file> existe diferencia y se muestra. ¿Por qué puede ser?

Git diff devuelve el index cd785c4..967453b 100644 numbers de blob index cd785c4..967453b 100644 , ¿qué puedo hacer con eso?

¿Puede esa información ser útil para mí?

Cuando uso git log -p -<n> No veo cambios en lo que existe en el file, pero si pruebo git diff <prev>..<next> <file> existe diferencia y se muestra. ¿Por qué puede ser?

Esto significa que la confirmación en cuestión es una confirmación de fusión , es decir, una confirmación con al less dos ID principales. Cuando git log -p o git show muestra una combinación, su valor pnetworkingeterminado es usar el formatting de diferencias combinado de git.

Los detalles precisos de los diffs combinados se encuentran en la documentation en la sección de formatting de diferencias combinadas , pero voy a citar de la sección "formatting de diferencias para las fusiones" :

Tenga en count que la combinación combinada solo enumera los files que fueron modificados de todos los padres .

(en negrita mía). Supongamos, por ejemplo, que fusiona la feature twig en el develop twig y que, en develop , el file README dice, en parte:

 There will be a feature X soon. 

Supongamos que en la feature , README dice:

 Feature X is now supported. 

Cuando fusiona la feature en develop , el file README recoge el cambio, pero el README resultante coincide exactamente con la versión en develop .

Si ahora git show la confirmación de combinación (o aparece en git log -p ), la diferencia combinada compara README en la combinación contra README en el primer elemento primario (es diferente, tiene el text "ahora compatible" cuando no lo hizo) t before), luego compara README en la fusión contra README en el segundo padre. La segunda comparación no muestra ningún cambio ya que la combinación recogió la versión de la feature , por lo que el file de diferencias combinado omite el file .

Cuando encuentre el primer ID padre de la combinación, es decir, el compromiso que fue la punta de develop antes de la fusión, y git diff que confirme contra el compromiso de fusión, obtendrá un diff regular (no combinado), y desde que README seleccionó hasta el cambio, ves el cambio.

Tenga en count que puede usar la opción -m para decir cosas que muestran fusiones (por ejemplo, git log y git show ) para mostrar un diff en cada padre, en lugar de una única combinación de diferencias. (Para las fusiones típicas de dos padres, esto muestra dos diferencias con respecto a la confirmación. Internamente, estos commands generan un compromiso adicional falso para hacer esto. No debería tener que saber acerca de la confirmación falsa interna solamente, pero se filtra en algunos casos.)


Git diff devuelve el index cd785c4..967453b 100644 numbers de blob index cd785c4..967453b 100644 , ¿qué puedo hacer con eso?

Vea esta respuesta .