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ú.