¿Qué es un Commit en Git y Cómo Escribir Buenos Mensajes?
Aprende qué sucede internamente al hacer un commit, el estándar internacional de Conventional Commits (feat, fix, docs, refactor) y las reglas de oro para redactar mensajes profesionales.
Un commit en Git es una instantánea (snapshot) inmutable del estado de los archivos del proyecto en un momento determinado, acompañada de un identificador criptográfico único (hash), la fecha, el autor y un mensaje explicativo.
Un buen historial de commits estructurado actúa como el diario de a bordo y la documentación viva del software, permitiendo rastrear por qué se tomó cada decisión técnica y facilitando la resolución de bugs mediante herramientas como `git bisect`.
Imagina los recibos foliados de una notaría: cada recibo tiene un número único, una fecha y describe con absoluta precisión qué propiedad se vendió y quién firmó el trámite. No puedes tachar un recibo viejo; si te equivocas, debes emitir una nota aclaratoria posterior.
Explicación Paso a Paso del Tema
Adoptar el estándar Conventional Commits
Estructura tus mensajes usando prefijos semánticos estandarizados.
El formato estándar es `<tipo>(alcance opcional): <descripción en imperativo>`. Los tipos más usados son: `feat:` (nueva funcionalidad para el usuario), `fix:` (corrección de un bug), `docs:` (cambios en documentación o README), `style:` (formato, espacios, punto y coma sin afectar lógica), `refactor:` (reestructuración de código sin cambiar funcionalidad ni arreglar bugs), `test:` (añadir o corregir pruebas) y `chore:` (tareas de mantenimiento como actualizar dependencias de npm).
git commit -m "feat(auth): permitir inicio de sesión mediante huella digital"
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| feat | Tipo semántico | Comunica de inmediato que se introdujo una nueva característica |
| (auth) | Alcance (Scope) | Componente o módulo específico afectado por la modificación |
| descripción | Resumen en imperativo | Frase clara y concisa en presente o imperativo sin punto final |
Usar Conventional Commits permite generar automáticamente changelogs (notas de la versión) y calcular números de versión semántica (SemVer) con herramientas de CI/CD.
Escribir mensajes genéricos y vacíos de contenido como 'cambios', 'actualización', 'listo' o 'subiendo archivos'. Son inútiles cuando hay que rastrear un error meses después.
Escribir commits atómicos y enfocados
Haz que cada commit resuelva un único problema bien delimitado.
No acumules el trabajo de tres días con 15 archivos modificados que mezclan estilos, arreglos de bugs y funciones nuevas en un solo commit gigantesco. Si ese commit introduce un error, será imposible revertir el bug sin perder también las funciones nuevas.
git add src/utils/formatDate.ts && git commit -m "test: agregar pruebas unitarias para formateo de fechas"
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| git add archivo-específico | Preparación quirúrgica | Añade únicamente el archivo involucrado en la tarea específica |
Si modificaste varias cosas en el mismo archivo, puedes usar `git add -p` (modo parche) para seleccionar interactivamente qué bloques de líneas enviar al commit y cuáles dejar para el siguiente.
Hacer `git add .` sin pensar e incluir cambios a medio hacer o archivos que pertenecen a otra funcionalidad no terminada.
Corregir el último commit con --amend
Enmienda errores menores en el mensaje o añade un archivo olvidado sin crear un commit extra.
Si acabas de hacer un commit y te diste cuenta de que olvidaste incluir un archivo pequeño o cometiste un error ortográfico en el mensaje, puedes usar `git commit --amend`. Esto sustituye el último commit por una versión actualizada con el mismo historial limpio.
git add archivo-olvidado.txt && git commit --amend --no-edit
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| --amend | Modificador de confirmación | Modifica el commit más reciente de la rama actual en lugar de crear uno nuevo |
| --no-edit | Flag de texto | Mantiene intacto el mensaje del commit original sin abrir el editor |
Solo usa `--amend` para commits puramente locales que todavía no hayas subido al servidor remoto.
Usar `git commit --amend` en commits que ya fueron empujados con `git push` a un repositorio público compartido; alterará el hash y causará conflictos a tus compañeros.
Casos Prácticos Reales en Producción
Situaciones de ingeniería reales sin mención de presupuestos ficticios.
1Caso de Producción: Generación Automática de Notas de Versión en E-commerce
Un equipo de 20 ingenieros tardaba medio día de trabajo antes de cada lanzamiento a producción revisando manualmente qué cambios se habían implementado para redactar el boletín de novedades para clientes.
Se configuró una regla obligatoria de Conventional Commits en Git con herramientas de validación de hooks (`commitlint`). La pipeline de CI/CD procesa los prefijos `feat` y `fix` y redacta automáticamente el archivo CHANGELOG.md en cada release.
Fichas Nemotécnicas de Conceptos Clave
Glosario rápido para recordar los términos fundamentales de la lección.
Práctica de incluir en un commit una sola tarea o cambio lógico completo e indivisible, facilitando su revisión y reversión si falla.
Convención ligera sobre los mensajes de commit que añade significado semántico estructurado mediante prefijos estandarizados.
Puntero especial de Git que indica en qué commit y rama específica te encuentras trabajando en este momento.
¿Qué es un Commit en Git y Cómo Escribir Buenos Mensajes?
Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.
¿Cuál de los siguientes mensajes sigue mejor las directrices de Conventional Commits?
¿Qué bandera permite modificar el commit más reciente para añadir un archivo olvidado sin crear un commit nuevo?
¿Qué representa el prefijo 'refactor:' en Conventional Commits?
Preguntas Frecuentes (FAQ)
¿De qué longitud debe ser el mensaje principal de un commit?
La regla recomendada por la comunidad es mantener la primera línea por debajo de los 50 o 72 caracteres. Si necesitas dar más detalles técnicos, deja una línea en blanco y escribe párrafos explicativos en el cuerpo del mensaje.
¿Qué significa escribir mensajes en modo imperativo?
Significa redactar el mensaje como una orden directa: 'fix: corregir fallo en login' en lugar de 'arreglé un fallo' o 'arreglando el fallo'. Esto coincide con el formato nativo en que Git redacta sus propios mensajes de fusión.
¿Por qué los commits usan hashes criptográficos en vez de números secuenciales (1, 2, 3)?
Porque en un sistema distribuido donde cientos de personas trabajan en paralelo en distintas ramas sin conexión continua, los números secuenciales colisionarían de inmediato. Un hash criptográfico asegura un identificador universal único.