Ver el historial de Git con log, show y diff


Digamos que abres weather-app una mañana de lunes y no recuerdas exactamente qué implementaste el viernes. O un compañero te pregunta por qué cambió la conversión de temperatura la semana pasada, y quieres la respuesta real en lugar de una suposición. El ciclo de commit cubre cómo se guarda un commit. Este capítulo cubre leer ese historial nuevamente: qué pasó, quién lo hizo y cuándo. El comando para eso es git log, y aquí está todo lo que imprime en un proyecto pequeño:
$ git log
commit 4f2a1c9d8e7b6a5c4d3e2f1a0b9c8d7e6f5a4b3c
Author: Priya Nair <[email protected]m>
Date: Tue Jul 14 09:12:03 2026 +0100
Corregir conversión de temperatura en fórmula Celsius a Fahrenheit
commit 5f3d8b21a90e7c6d5b4a3f2e1d0c9b8a7f6e5d4c
Author: Kwame Boateng <[email protected]m>
Date: Mon Jul 13 16:45:22 2026 +0100
Agregar pronóstico de cinco días al panel de control
commit 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b
Author: Kwame Boateng <[email protected]m>
Date: Mon Jul 13 11:03:47 2026 +0100
Configurar estructura del proyectoUn comando, y toda la historia del proyecto está ahí: tres commits, el más reciente primero, cada uno con quién lo escribió, cuándo y por qué.
Leer el registro con git log
git log retrocede a través de cada commit accesible desde donde estés, primero el más reciente. Cada entrada muestra cuatro cosas: un hash (la larga cadena de letras y números que identifica ese commit exacto), el autor, la fecha y el mensaje que escribió su autor.
Un commit es todas esas cuatro cosas juntas: una instantánea de cada archivo rastreado en ese momento, el mensaje que describe el cambio, quién lo hizo y un vínculo al commit que vino justo antes, su commit padre. Ese vínculo padre es lo que convierte un montón de instantáneas separadas en una línea de tiempo real. Lee git log de arriba a abajo y estarás leyendo esa línea de tiempo hacia atrás, del presente al inicio.
El hash parece intimidante al principio, pero rara vez necesitas la cosa completa. 4f2a1c9d8e7b6a5c4d3e2f1a0b9c8d7e6f5a4b3c y 4f2a1c9 apuntan al mismo commit. Git solo necesita suficiente del hash para diferenciarlo de todos los otros commits en el repositorio, y los primeros siete u ocho caracteres casi siempre son suficientes. Verás la forma corta en todas partes, incluyendo los comandos en el resto de este capítulo.
git log enumera cada commit, el más reciente primero, con su hash, autor, fecha y mensaje. Un commit es esa instantánea más su mensaje más un vínculo al commit anterior. Casi nunca necesitas el hash completo, los primeros caracteres son suficientes para que Git sepa exactamente cuál commit quieres decir. Inspeccionar un commit con git show
git log te dice que un commit sucedió. git show <hash> te dice exactamente qué hizo:
$ git show 4f2a1c9
commit 4f2a1c9d8e7b6a5c4d3e2f1a0b9c8d7e6f5a4b3c
Author: Priya Nair <[email protected]m>
Date: Tue Jul 14 09:12:03 2026 +0100
Corregir conversión de temperatura en fórmula Celsius a Fahrenheit
diff --git a/src/index.js b/src/index.js
index 3f2c1a9..7b8e2d4 100644
--- a/src/index.js
+++ b/src/index.js
@@ -12,7 +12,7 @@ function celsiusToFahrenheit(celsius) {
- return celsius * (9 / 5 + 32)
+ return (celsius * 9) / 5 + 32La mitad superior es los mismos metadatos que git log muestra. Debajo está el cambio real: una línea que comienza con - es una línea que el commit removió, una línea que comienza con + es una línea que agregó, y las líneas sin marcar son contexto que se mantuvo igual. Aquí se lee claramente: la línea antigua agrupó 32 dentro de los paréntesis, así que se agregó antes de que la multiplicación sucediera. La corrección reagrupa los paréntesis alrededor de celsius * 9 para que 32 se agregue al final, el error de precedencia de operadores que describe el mensaje de Priya.
git show <hash> muestra un commit en su totalidad: quién lo hizo, cuándo y las líneas reales que cambió. Las líneas removidas comienzan con un signo menos, las líneas agregadas comienzan con un signo más. Es la forma más rápida de responder "qué hizo realmente este commit". Qué muestra git diff y la trampa que casi todos enfrentan
git log y git show leen el historial comprometido. git diff lee lo que no se ha comprometido aún: los cambios en tu directorio de trabajo en este momento, comparados contra tu último commit.
$ git diff
diff --git a/README.md b/README.md
index 1c2d3e4..9f8a7b6 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
# weather-app
+Panel de control meteorológico de cinco días construido con JavaScript vanilla.Ese es el cambio que hiciste a README.md, mostrado antes de haber preparado o comprometido nada. Aquí está la parte que atrapa a casi todos en su primera semana: ejecuta git add . para preparar ese mismo cambio, luego ejecuta git diff nuevamente, y no muestra nada en absoluto.
$ git add .
$ git diffNada impreso. El cambio no desapareció, y nada salió mal. git diff simple compara tu directorio de trabajo contra el área de preparación, y una vez que has preparado todo, esos dos ahora coinciden, así que no hay diferencia que mostrar ahí. Para ver los cambios esperando en el área de preparación, usa git diff --staged en su lugar.
$ git diff --staged
diff --git a/README.md b/README.md
index 1c2d3e4..9f8a7b6 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
# weather-app
+Panel de control meteorológico de cinco días construido con JavaScript vanilla.El mismo cambio, ahora visible, porque --staged compara el área de preparación contra tu último commit en su lugar.
git diff muestra cambios en tu directorio de trabajo que aún no están preparados. Una vez que preparas todo con git add, git diff simple se queda en silencio. Eso es esperado, tus cambios siguen ahí. Usa git diff --staged para ver qué espera ser comprometido. Por qué el historial de Git forma un gráfo
Cada commit que has visto hasta ahora apunta a exactamente un padre, y leer git log de arriba a abajo se ha sentido como leer una línea recta. Eso se sostiene para un proyecto en solitario trabajando en una línea de trabajo. Deja de sostenerse el momento en que las ramas y fusiones entran en la imagen, cubierto a continuación en Ramas, porque el historial real de un proyecto puede dividirse en líneas separadas y volver a juntarse.

