Formato
Estrutura da Mensagem de Commit
[optional scope]: [optional body] [optional footer(s)]
Explicação das Partes
typeCategoria da alteração (feat, fix, etc.)
scopeParte do código afetada (opcional)
descriptionResumo curto no modo imperativo
bodyExplicação detalhada (opcional, após linha em branco)
footerMetadados como BREAKING CHANGE ou refs de issues
Regras
Imperative mood"add feature" não "added feature"
Lowercase typefeat: não Feat:
No periodDescrição não termina com "."
Blank lineSeparar body/footer da descrição
Tipos
Tipos Principais (relevantes para SemVer)
featNova funcionalidade (dispara bump de versão MINOR)
fixCorreção de bug (dispara bump de versão PATCH)
Tipos Estendidos (Convenção Comum)
buildSistema de build ou dependências externas
choreTarefas de manutenção (sem alterações em src/test)
ciConfiguração e scripts de CI
docsAlterações somente em documentação
perfMelhoria de performance
refactorAlteração de código que não corrige nem adiciona
revertReverte um commit anterior
styleFormatação, espaços em branco (não estilo CSS)
testAdicionar ou corrigir testes
Escopo
Uso de Escopo
feat(auth): add OAuth2 login flow fix(parser): handle empty input gracefully docs(readme): update installation steps refactor(api): extract validation middleware
Diretrizes de Escopo
Module namefeat(auth):, fix(parser):
Layer namefeat(api):, fix(db):
Feature areafeat(search):, fix(checkout):
Dependencybuild(deps):, chore(npm):
Omit if broadUse sem escopo para alterações transversais
Breaking Changes
Marcando Breaking Changes
feat!: remove deprecated login endpoint feat(api)!: change response format to JSON:API fix!: drop Node 14 support
Breaking Change no Footer
feat(api): change user endpoint response BREAKING CHANGE: response now returns array instead of object. Update client parsing.
Regras
! after type/scopeMarcador abreviado de breaking change
BREAKING CHANGE:Token no footer (sempre em maiúsculas)
BREAKING-CHANGE:Também válido (forma com hífen)
SemVer impactDispara bump de versão MAJOR
Any typeBreaking changes podem aplicar a qualquer tipo
Exemplos
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
Com Escopo
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
Com Body e 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:Descreve breaking change na API
Closes #123Fechar issue automaticamente ao merge
Fixes #456Fechar issue automaticamente (referência de fix)
Refs #789Referenciar issue sem fechar
Reviewed-by: nameAtribuição de revisor
Co-authored-by: nameAtribuição de co-autor
Múltiplos Footers
feat(api)!: redesign authentication flow Migrate from session-based to JWT auth. BREAKING CHANGE: /auth endpoints changed Closes #101 Refs #98, #99
Ferramentas
Lint de Commits
npm install -D @commitlint/cli \ @commitlint/config-conventional echo "module.exports = { extends: \ ['@commitlint/config-conventional'] }" \ > commitlint.config.js
Ferramentas Populares
commitlintLint de mensagens de commit conforme convenção
huskyGit hooks (executar commitlint no commit)
commitizen (cz)Construtor interativo de mensagens de commit
standard-versionChangelog automático + bump de versão
semantic-releasePipeline de release totalmente automatizado
release-pleaseFerramenta de automação de release do Google
Configuração do Commitizen
npm install -D commitizen \ cz-conventional-changelog npx commitizen init cz-conventional-changelog # Use: npx cz (or git cz with alias)
Padrões Comuns
Mapeamento de Bump de Versão
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.Sem bump de versão
Agrupamento de 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.