← Git

Flujos y buenas prácticas

¿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: o fix:. El historial es documentación, así que evito mensajes como 'cambios' o 'wip'."

Reto rápido

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