Ver la diferencia entre el estado actual y la última confirmación

93

A veces, cuando estoy a punto de realizar una confirmación, no puedo recordar exactamente qué ha cambiado desde la última confirmación. ¿Cómo puedo ver una diferencia del estado actual del código y la última confirmación?

travis1097
fuente

Respuestas:

113

Si aún no ha agregado ningún archivo al índice (con git add), simplemente haga

git diff

Esto mostrará la diferencia entre su árbol de trabajo y el índice.

Si ha agregado archivos al índice, debe hacer esto para mostrar las diferencias entre el índice y la última confirmación (HEAD).

git diff --cached

Finalmente, si desea ver los cambios realizados en el árbol de trabajo en comparación con la última confirmación ( HEAD), puede (como señala Carlos) hacer

git diff HEAD

Esos cambios son la combinación de git diffy git diff --cached.

Klas Mellbourn
fuente
2
git diffcompara el árbol de trabajo con el índice, no HEAD.
Carlos Martín Nieto
@ CarlosMartínNieto Tiene razón, señor. He mejorado mi publicación para reflejar esto.
Klas Mellbourn
Lo ejecuto, pero la terminal no termina, ¿cómo puedo salir? nada funciona.
Francisco Corrales Morales
@KlasMellbourn, ¿es posible conocer git diffel estado del índice y la confirmación anterior en un mensaje de diferencia?
alpha_989
2
Bien descubierto, es git diff --cached HEAD^:)
alpha_989
33

Si acaba de realizar una confirmación, o desea ver qué ha cambiado en la última confirmación en comparación con el estado actual (asumiendo que tiene un árbol de trabajo limpio), puede usar:

git diff HEAD^

Esto comparará el HEAD con el compromiso inmediatamente anterior. También se podría hacer

git diff HEAD^^

para comparar con el estado de juego hace 2 confirmaciones. Para ver la diferencia entre el estado actual y una determinada confirmación, simplemente haz lo siguiente:

git diff b6af6qc

Donde b6af6qces un ejemplo de un hash de confirmación.

tallamjr
fuente
3
Un aviso para Windows cmd versión de git: debe escapar del carácter de intercalación (^) con el propio intercalado. Por lo tanto, "git diff HEAD ^" será "git diff HEAD ^^". De la misma manera, "HEAD ^^" se ingresará como "HEAD ^^^^".
Eellor
1
En esta respuesta, creo que no está claro a qué se refiere "última confirmación". HEAD^es la confirmación antes de la última confirmación.
Klas Mellbourn
3

Le pides a git que difiera la confirmación actual / última, que tiene una abreviatura de HEAD.

Entonces git diff HEADcomparará el estado actual del árbol de trabajo con la confirmación actual.

Carlos Martín Nieto
fuente
3

esto también muestra la diferencia y qué archivos se han cambiado / modificado.

$ git status 

Muestra las rutas que tienen diferencias entre el archivo de índice y la confirmación HEAD actual, las rutas que tienen diferencias entre el árbol de trabajo y el archivo de índice, y las rutas en el árbol de trabajo que no son seguidas por git (y no son ignoradas por gitignore (5) ). Los primeros son lo que comprometería ejecutando git commit; el segundo y el tercero son lo que podría confirmar ejecutando git add antes de ejecutar git commit.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html

Dekdev
fuente
2

Esto también funciona para mí:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Esto suele funcionar para un historial lineal. Esto podría volverse más complicado si también hay confirmaciones de fusión. Le recomiendo que consulte este documento para obtener una explicación agradable y completa, especialmente el ejemplo de la ilustración del árbol de confirmación:

https://git-scm.com/docs/gitrevisions

Martin Flaska
fuente