¿Qué hace que un mensaje de commit sea bueno?
Ver respuesta — intenta responderla en voz alta primero
Un buen mensaje explica qué cambió y por qué, es claro y conciso, y suele escribirse en modo imperativo ("Agrega", "Corrige", no "Agregué" ni "Cambios"). Además, los commits deben ser atómicos: cada commit hace una sola cosa lógica. Muchos equipos siguen la convención Conventional Commits (feat:, fix:, etc.).
El historial de commits es documentación. Un mensaje malo como cambios o fix no le dice nada a tu yo del futuro ni a tus compañeros.
Buenas prácticas:
- Modo imperativo: "Agrega validación", no "Agregué validación". Es la convención de Git (completa la frase "este commit va a...").
- Conciso pero claro: una línea de resumen corta (unos 50 caracteres). Si hace falta más contexto, un cuerpo separado por una línea en blanco.
- Explica el porqué: el qué se ve en el diff; el por qué solo lo sabes tú.
- Commits atómicos: cada commit una sola cosa lógica. No mezcles un fix con un refactor y tres features.
Conventional Commits es una convención popular con prefijos: feat: (nueva funcionalidad), fix: (arreglo), docs:, refactor:, test:, chore:.
# Mal: no dice nada
git commit -m "cambios"
git commit -m "fix"
# Bien: imperativo, claro, dice qué hace
git commit -m "Agrega validacion de email en el formulario de registro"
git commit -m "Corrige calculo del total cuando el carrito esta vacio"
# Con Conventional Commits (prefijo de tipo)
git commit -m "feat: agrega login con Google"
git commit -m "fix: corrige fuga de memoria en el listener del scroll"
# Mensaje con cuerpo (resumen + explicacion del porque)
git commit -m "fix: evita doble envio del formulario" -m "El boton no se deshabilitaba tras el primer click, generando pedidos duplicados."
Escribir mensajes inútiles (cambios, asdf, wip) o meter demasiadas cosas en un solo commit ("mega commit"). También, describir qué hiciste de forma obvia ("modifica archivo") en lugar del porqué. Un historial limpio ahorra muchísimo tiempo al depurar o al hacer git revert.
"Un buen mensaje explica qué cambió y sobre todo por qué, de forma clara y concisa, normalmente en imperativo, como 'Agrega validación' o 'Corrige el total'. Además procuro commits atómicos: cada commit hace una sola cosa lógica, así el historial es fácil de leer y de revertir. En equipos suelo seguir Conventional Commits con prefijos como
feat:ofix:. El historial es documentación, así que evito mensajes como 'cambios' o 'wip'."
¿Cuál de estos dos mensajes es mejor y por qué? A) git commit -m "arreglos" B) git commit -m "fix: corrige el redondeo del precio con descuento"
Ver respuesta
El B. Está en modo imperativo, es específico (dice exactamente qué se corrigió: el redondeo del precio con descuento) y usa un prefijo de Conventional Commits (fix:) que indica el tipo de cambio. El A ("arreglos") no dice qué se arregló ni por qué, así que no aporta nada al historial: tu yo del futuro no sabría qué pasó ahí sin abrir el diff.