Commit
Un commit es la unidad de historia más pequeña que alguien leerá en un año, bajo presión, durante un incidente. Optimiza para ese lector.
Flujo de trabajo
- Revisa antes de hacer commit:
git status,git diff --staged,git diff. Nunca hagas commit a ciegas. - Verifica que no haya nada que no deba llegar al repositorio: credenciales, archivos
.env, claves privadas, binarios grandes, prints de depuración, código comentado. Si encuentras algo, detente e informa al usuario. Consulta la skillsecrets-hygiene. - Añade archivos deliberadamente. Prefiere
git add <paths>sobregit add -A. Un cambio lógico por commit; si el diff mezcla una refactorización y una funcionalidad, divídelo. - Escribe el mensaje con el formato siguiente.
- Haz commit con un heredoc para que los cuerpos multilínea sobrevivan al shell:
git commit -m "$(cat <<'MSG'
feat(auth): añadir inicio de sesión OIDC para la consola de administración
Reemplaza la contraseña compartida de autenticación básica con OIDC
dejando que el acceso se pueda revocar por usuario. Las sesiones
expiran después de 8h.
Refs: PLAT-412
MSG
)"
- Confirma con
git log -1 --stat. Nunca hagas amend o force-push a menos que el usuario lo pida explícitamente.
Formato del mensaje
<tipo>(<ámbito>): <resumen imperativo, ≤72 caracteres, sin punto final>
<por qué existe este cambio, no qué muestra el diff — el diff ya muestra eso>
<pie de página: Refs/Closes ticket, BREAKING CHANGE: ..., Co-Authored-By>
Tipos: feat, fix, refactor, perf, test, docs, build, ci, chore, revert.
El ámbito es el módulo, servicio o stack afectado (api, terraform/vpc, ci). Omítelo cuando el cambio sea global.
El cuerpo importa más que el resumen. Responde "¿por qué ahora?" y "¿qué consideramos?" en dos a cuatro frases. Un commit de una línea está bien para cambios triviales.
Ejemplos
Entrada: corregido el puntero nulo cuando el bucket S3 no tiene etiquetas
Salida: fix(s3-inventory): manejar buckets sin conjunto de etiquetas
Entrada: subí el proveedor de Terraform AWS de 5.40 a 5.60, necesario para el nuevo atributo de runtime lambda Salida:
build(terraform): subir proveedor AWS a 5.60
Requerido para `aws_lambda_function.runtime = "python3.13"`. Sin diffs de
recursos en `terraform plan` en todos los stacks.
Cuando se proporciona $ARGUMENTS
Trátalo como una sugerencia de ámbito o resumen del usuario, pero aún así inspecciona el diff y corrígelo si no coincide con lo que realmente cambió.