Capítulo 5 de 33 8 secciones 6 min

Escribir commits para tu yo del futuro

Qué poner en el mensaje y cómo arreglar el último cuando sale mal

Un buen mensaje de commit se lee como el titular de una noticia: dice qué pasó, no dice "cambios". Lo escribes para la persona que dentro de seis meses va a buscar en qué momento se rompió algo, y esa persona casi siempre eres tú. Y si te sale mal, el último se corrige con <code>--amend</code> ✍️

El mensaje es la mitad del commit

El commit guarda el qué. El mensaje guarda el por qué, y esa es la parte que ningún programa puede reconstruir después.

Armo el repositorio de la tienda y hago dos commits, uno con un mensaje malo y otro con uno bueno, para que veas la diferencia en la historia:

mkdir tienda
cd tienda
git init -q
printf 'ciudad,monto\nLima,1200\n' > ventas.csv
git add ventas.csv
git commit -q -m "cambios"
printf 'Arequipa,890\n' >> ventas.csv
git add ventas.csv
git commit -q -m "Se agregan las ventas de Arequipa del cierre de mes"
git log --oneline
92c3025 Se agregan las ventas de Arequipa del cierre de mes
edf24eb cambios

Dentro de seis meses el primero no te dice nada. El segundo te dice qué buscar sin abrir un archivo.

La regla que uso

Tres cosas y ya está:

  • Qué pasó, no qué tocaste. "Se corrige el IGV del reporte", no "modificado reporte.py".
  • Una idea por commit. Si tienes que escribir "y" en el mensaje, probablemente son dos commits.
  • Que se entienda solo. Sin "lo de ayer" ni "el arreglo que hablamos", porque en seis meses eso no existe.

Cuando el mensaje no cabe en una línea

Para lo complicado, un commit puede tener título y explicación. Se pasan dos -m y el segundo es el cuerpo:

printf 'Trujillo,1450\n' >> ventas.csv
git add ventas.csv
git commit -q -m "Se agregan las ventas de Trujillo" \
  -m "Llegaron por WhatsApp del jefe de bodega y no por el sistema, asi que el monto esta sin IGV."
git log -1
commit 960a5d58527ff7a53e6c3978b35a068e3972bc7d
Author: Miss Yera <hola@missyera.com>
Date:   Thu Jan 15 09:00:00 2026 -0500

    Se agregan las ventas de Trujillo
    
    Llegaron por WhatsApp del jefe de bodega y no por el sistema, asi que el monto esta sin IGV.

El título es lo que se lee en la lista; el cuerpo lo lee quien necesita el detalle. Ahí es donde se escribe lo que no se puede deducir mirando el código 📝

Arreglar el último commit

Te equivocaste en el mensaje o se te olvidó un archivo. Mientras no lo hayas compartido, el último commit se puede rehacer:

git commit -q --amend -m "Se agregan las ventas de Trujillo del cierre de mes"
git log --oneline -1
f2d11f7 Se agregan las ventas de Trujillo del cierre de mes

Fíjate en algo importante: el hash cambió. No corrigió el commit, hizo uno nuevo y tiró el viejo. Por eso la regla del "mientras no lo hayas compartido", que retomamos en el capítulo 10 cuando entren otras personas al proyecto.

El commit sin mensaje

printf 'Cusco,760\n' >> ventas.csv
git add ventas.csv
git commit -m ""
Aborting commit due to empty commit message.

Git se niega. Es de las pocas veces que un programa te obliga a explicarte, y la verdad es que hace bien 🙃

La trampa

Vas a cerrar el día y guardas todo lo que tocaste desde la mañana en un solo commit, que es lo cómodo.

$ git add .
$ git commit -m "Avances del dia"

[main 5d9c2f1] Avances del dia
 9 files changed, 340 insertions(+), 88 deletions(-)
Qué está mal

Ese commit no se puede deshacer nunca 🧨

Ahí dentro está el arreglo del IGV, el reporte nuevo, dos pruebas y un cambio de configuración. El día que el IGV salga mal y quieras volver atrás, te llevas por delante las otras ocho cosas.

Un commit es la unidad más chica que puedes deshacer. Si metes nueve cosas, la unidad más chica pasa a ser las nueve juntas, y ahí es donde Git deja de servirte y pasa a ser un trámite.

Cuesta lo mismo hacer cuatro commits que uno: es el mismo trabajo repartido en cuatro add. Y el día que lo necesites vale oro.

Comprueba que se entendió

Comprueba que lo tienes

¿Cuál de estos mensajes sirve dentro de seis meses?

  • actualización
  • Se corrige el IGV mal calculado en el reporte de ventas
  • arreglos varios
  • cambios en ventas.csv

Ejercicios

1. Un commit con título y cuerpo

Agrega el canal de cada venta y explica en el cuerpo de dónde salió el dato.

printf 'canal\nbodega\n' > canales.csv
git add canales.csv
git commit -q -m "Se agrega el catalogo de canales" \
  -m "Por ahora solo bodega. Minimarket y horeca entran cuando el area comercial confirme los nombres."
git log -1 --format="%s%n%n%b"
Se agrega el catalogo de canales

Por ahora solo bodega. Minimarket y horeca entran cuando el area comercial confirme los nombres.

El %s es el título y el %b el cuerpo. Poder pedir cada parte por separado es lo que hace útil la separación.

2. Corrige el mensaje del último

Cámbiale el título al commit que acabas de hacer y comprueba que el hash es otro.

git commit -q --amend -m "Se agrega el catalogo de canales de venta"
git log --oneline -1
4b9867f Se agrega el catalogo de canales de venta

Mensaje nuevo, hash nuevo. Es un commit distinto que reemplazó al anterior.

3. Mete un archivo que se te olvidó

--amend no sirve solo para el mensaje. Agrega un archivo al último commit sin crear uno nuevo.

printf 'bodega,ciudad\nBodega Sol,Lima\n' > clientes.csv
git add clientes.csv
git commit -q --amend --no-edit
git show --stat --oneline HEAD
0e690f1 Se agrega el catalogo de canales de venta
 canales.csv  | 2 ++
 clientes.csv | 2 ++
 ventas.csv   | 1 +
 3 files changed, 5 insertions(+)

El --no-edit significa "no me preguntes el mensaje, deja el que había". Ahora el commit lleva los dos archivos 📎

4. Cuenta cuántos commits llevas

Pide el número total de la historia.

git rev-list --count HEAD
4

rev-list lista los commits sin adornos, y con --count los cuenta. Sirve para ver de un vistazo si un proyecto está vivo.

5. Busca un commit por su mensaje

Encuentra los commits que hablen de Arequipa.

git log --oneline --grep="Arequipa"
92c3025 Se agregan las ventas de Arequipa del cierre de mes

Aquí se cobra todo el esfuerzo de escribir bien los mensajes: si dijeran "cambios", esta búsqueda no encontraría nada 🎯

6. Los mensajes a tu manera

Muestra la historia con el formato que tú elijas: hash corto, mensaje y hace cuánto.

git log --format="%h  %s"
0e690f1  Se agrega el catalogo de canales de venta
f2d11f7  Se agregan las ventas de Trujillo del cierre de mes
92c3025  Se agregan las ventas de Arequipa del cierre de mes
edf24eb  cambios

Los códigos con porcentaje son el idioma de git log. Con %h, %s, %an y %ar te alcanza para casi todo.

7. El commit que Git no deja hacer

Intenta guardar con un mensaje vacío.

printf 'Piura,540\n' >> ventas.csv
git add ventas.csv
git commit -m "   "
Aborting commit due to empty commit message.

Ni con espacios. Git los recorta y se sigue negando, que es exactamente lo que uno necesita a las once de la noche 😅

Lo que te llevas

El mensaje lo escribes para quien va a leerlo dentro de seis meses, y esa persona eres tú.

¿Tienes alguna duda o consulta?