Formato
Estructura del mensaje de commit
[optional scope]: [optional body] [optional footer(s)]
Partes explicadas
typeCategoría del cambio (feat, fix, etc.)
scopeSección del código afectada (opcional)
descriptionResumen breve en modo imperativo
bodyExplicación detallada (opcional, tras línea en blanco)
footerMetadatos como BREAKING CHANGE o referencias a issues
Reglas
Modo imperativo"add feature" no "added feature"
Tipo en minúsculasfeat: no Feat:
Sin punto finalLa descripción no termina con "."
Línea en blancoSeparar body/footer de la descripción
Tipos
Tipos principales (relevantes para SemVer)
featNueva funcionalidad (incrementa versión MINOR)
fixCorrección de bug (incrementa versión PATCH)
Tipos extendidos (convención común)
buildSistema de build o dependencias externas
choreTareas de mantenimiento (sin cambios en src/tests)
ciConfiguración y scripts de CI
docsSolo cambios en documentación
perfMejora de rendimiento
refactorCambio de código que no corrige ni agrega
revertRevierte un commit anterior
styleFormato, espacios en blanco (no estilos CSS)
testAgregar o corregir tests
Scope
Uso del scope
feat(auth): add OAuth2 login flow fix(parser): handle empty input gracefully docs(readme): update installation steps refactor(api): extract validation middleware
Guías de scope
Nombre de módulofeat(auth):, fix(parser):
Nombre de capafeat(api):, fix(db):
Área de funcionalidadfeat(search):, fix(checkout):
Dependenciabuild(deps):, chore(npm):
Omitir si es amplioSin scope para cambios transversales
Cambios incompatibles
Marcar cambios incompatibles
feat!: remove deprecated login endpoint feat(api)!: change response format to JSON:API fix!: drop Node 14 support
Cambio incompatible en footer
feat(api): change user endpoint response BREAKING CHANGE: response now returns array instead of object. Update client parsing.
Reglas
! after type/scopeMarcador abreviado de cambio incompatible
BREAKING CHANGE:Token de footer (siempre en mayúsculas)
BREAKING-CHANGE:También válido (con guion)
Impacto SemVerIncrementa versión MAJOR
Cualquier tipoLos cambios incompatibles aplican a cualquier tipo
Ejemplos
Commits simples
feat: add email notifications fix: prevent race condition in checkout docs: correct typo in contributing guide style: format with prettier refactor: simplify error handling logic
Con scope
feat(blog): add comment threading fix(auth): refresh token before expiry test(api): add missing edge case coverage ci(github): add Node 20 to test matrix
Con body y footer
fix(parser): handle nested quotes correctly Previously, nested quotes caused the parser to enter an infinite loop. This adds a depth counter to prevent unbounded recursion. Closes #234
Footer
Tokens de footer
BREAKING CHANGE:Describe cambio de API incompatible
Closes #123Cierra issue automáticamente al hacer merge
Fixes #456Cierra issue (referencia de fix)
Refs #789Referencia issue sin cerrarlo
Reviewed-by: nameAtribución de revisor
Co-authored-by: nameAtribución de co-autor
Múltiples footers
feat(api)!: redesign authentication flow Migrate from session-based to JWT auth. BREAKING CHANGE: /auth endpoints changed Closes #101 Refs #98, #99
Herramientas
Linting de commits
npm install -D @commitlint/cli \ @commitlint/config-conventional echo "module.exports = { extends: \ ['@commitlint/config-conventional'] }" \ > commitlint.config.js
Herramientas populares
commitlintValidar mensajes de commit según la convención
huskyHooks de Git (ejecutar commitlint al hacer commit)
commitizen (cz)Constructor interactivo de mensajes de commit
standard-versionChangelog automático + incremento de versión
semantic-releasePipeline de release totalmente automatizado
release-pleaseHerramienta de automatización de releases de Google
Configuración de Commitizen
npm install -D commitizen \ cz-conventional-changelog npx commitizen init cz-conventional-changelog # Usar: npx cz (o git cz con alias)
Patrones comunes
Mapeo de incremento de versión
fix:PATCH (1.0.0 → 1.0.1)
feat:MINOR (1.0.0 → 1.1.0)
BREAKING CHANGEMAJOR (1.0.0 → 2.0.0)
docs:, style:, etc.Sin incremento de versión
Agrupación en changelog
## [1.2.0] - 2026-03-27 ### Features - add email notifications (abc1234) ### Bug Fixes - prevent race condition (#123) (def5678)
Formato de revert
revert: feat(blog): add comment threading This reverts commit abc1234def5678.