Ver el historial de Git con log, show y diff


Imagina que abres weather-app un lunes por la mañana y no recuerdas exactamente qué subiste el viernes. O un compañero te pregunta por qué cambió la conversión de temperatura la semana pasada, y quieres darle la respuesta real en lugar de una suposición. El ciclo del commit explica cómo se guarda un commit. Este capítulo trata sobre cómo leer ese historial: qué pasó, quién lo hizo y cuándo. El comando para eso es git log, y esto es todo lo que imprime para un proyecto pequeño:
$ git log
commit 4f2a1c9d8e7b6a5c4d3e2f1a0b9c8d7e6f5a4b3c
Author: Priya Nair <[email protected]m>
Date: Tue Jul 14 09:12:03 2026 +0100
Fix temperature conversion in Celsius-to-Fahrenheit formula
commit 5f3d8b21a90e7c6d5b4a3f2e1d0c9b8a7f6e5d4c
Author: Kwame Boateng <[email protected]m>
Date: Mon Jul 13 16:45:22 2026 +0100
Add five-day forecast to the dashboard
commit 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b
Author: Kwame Boateng <[email protected]m>
Date: Mon Jul 13 11:03:47 2026 +0100
Set up project structureCon un solo comando, tienes toda la historia del proyecto ahí mismo: tres commits, del más reciente al más antiguo, cada uno con quién lo escribió, cuándo y por qué.
Leer el historial con git log
git log recorre hacia atrás cada commit alcanzable desde donde estás, empezando por el más reciente. Cada entrada muestra cuatro cosas: un hash (la cadena larga de letras y números que identifica ese commit exacto), el autor, la fecha y el mensaje que su autor escribió.
Un commit es la combinación de esas cuatro cosas: una foto de todos los archivos rastreados en ese momento, el mensaje que describe el cambio, quién lo hizo y un enlace al commit inmediatamente anterior, su commit padre. Ese enlace al padre es lo que convierte un montón de fotos sueltas en una línea de tiempo real. Si lees git log de arriba hacia abajo, estás recorriendo esa línea de tiempo al revés, desde el presente hasta el inicio.
El hash se ve intimidante al principio, pero casi nunca necesitas la cadena completa. 4f2a1c9d8e7b6a5c4d3e2f1a0b9c8d7e6f5a4b3c y 4f2a1c9 apuntan al mismo commit. Git solo necesita la cantidad de caracteres del hash que baste para distinguirlo de cualquier otro commit del repositorio, y los primeros siete caracteres casi siempre son suficientes. Vas a ver la forma corta en todos lados, incluidos los comandos del resto de este capítulo.
git log lista cada commit, del más reciente al más antiguo, con su hash, autor, fecha y mensaje. Un commit es esa foto del proyecto más su mensaje más un enlace al commit anterior. Casi nunca necesitas el hash completo: los primeros caracteres bastan para que Git sepa exactamente a qué commit te refieres. Inspeccionar un commit con git show
git log te dice que ocurrió un commit. 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
Fix temperature conversion in Celsius-to-Fahrenheit formula
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 la misma información que muestra git log. Debajo está el cambio real: una línea que empieza con - es una línea que el commit eliminó, una línea que empieza con + es una línea que agregó, y las líneas sin marca son contexto que se mantuvo igual. Aquí se lee con claridad: la línea antigua agrupaba el 32 dentro del paréntesis, así que se sumaba antes de que ocurriera la multiplicación. La corrección reagrupa los paréntesis alrededor de celsius * 9 para que el 32 se sume al final, el error de precedencia de operadores que describe el mensaje de Priya.
git show <hash> muestra un commit completo: quién lo hizo, cuándo y las líneas exactas que cambió. Las líneas eliminadas empiezan con un signo menos, las líneas agregadas empiezan 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 confusión en la que casi todos caen
git log y git show leen el historial ya confirmado. git diff lee lo que todavía no se ha confirmado: los cambios que están en tu directorio de trabajo en este momento, comparados con 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
+A five-day weather dashboard built with vanilla JavaScript.Ese es el cambio que hiciste en README.md, mostrado antes de que hicieras stage o commit de nada. Aquí viene la parte que atrapa a casi todos en su primera semana: ejecuta git add . para hacer stage de ese mismo cambio, luego ejecuta git diff otra vez, y no muestra absolutamente nada.
$ git add .
$ git diffNo se imprime nada. El cambio no desapareció, y no pasó nada malo. git diff en su forma simple compara tu directorio de trabajo contra el área de staging, y una vez que hiciste stage de todo, esas dos cosas ahora coinciden, así que no queda ninguna diferencia que mostrar ahí. Para ver los cambios que están esperando en el área de staging, usa git diff --staged.
$ 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
+A five-day weather dashboard built with vanilla JavaScript.El mismo cambio, ahora visible, porque --staged compara el área de staging contra tu último commit en lugar del directorio de trabajo.
git diff muestra los cambios en tu directorio de trabajo que todavía no están en stage. Una vez que haces stage de todo con git add, git diff en su forma simple no muestra nada. Eso es lo esperado, tus cambios siguen ahí. Usa git diff --staged para ver lo que está esperando para confirmarse. Por qué el historial de Git forma un grafo
Cada commit que has visto hasta ahora apunta exactamente a un padre, y leer git log de arriba hacia abajo se ha sentido como leer una línea recta. Eso se cumple en un proyecto individual que trabaja en una sola línea de desarrollo. Deja de cumplirse en el momento en que entran en juego las ramas y las fusiones, que se cubren a continuación en Ramas, porque el historial real de un proyecto puede dividirse en líneas separadas y luego volver a unirse.

