Como escrever uma boa mensagem de commit
Quatro hábitos pequenos deixam o histórico do projeto legível para você e para quem chega depois.
Como é uma boa mensagem de commit?
Uma primeira linha curta no imperativo, de cerca de 50 caracteres, uma linha em branco e, se precisar, um corpo explicando o porquê. Cada commit deve ter uma mudança lógica só.
O que uma boa mensagem de commit faz
A mensagem é o que alguém lê daqui a seis meses, quando um teste quebra e a pergunta é "por que isto mudou?". O Pro Git, o livro oficial do projeto Git, reúne diretrizes de commit que valem para qualquer repositório. Elas são pequenas e se resumem em quatro hábitos.
Os quatro hábitos
- Um commit, uma mudança lógica. Em vez de juntar três assuntos num commit só, divida o trabalho. O livro cita
git add --patchpara marcar só parte das alterações de um arquivo. - Confira os espaços sobrando. Antes do commit, rode
git diff --check: ele aponta espaços em branco no fim das linhas e outros descuidos que você não quer eternizar no histórico. - Primeira linha curta. O livro sugere um resumo de cerca de 50 caracteres. É uma regra prática, não uma regra do Git: o Git aceita qualquer tamanho.
- Depois, uma linha em branco e a explicação. O livro sugere quebrar o texto por volta de 72 colunas e descrever a motivação da mudança, comparando com o comportamento anterior. Escreva no imperativo ("corrige o link", em vez de "corrigido" ou "corrige").
Esses números (50 e 72) são recomendações do livro, tratadas aqui como regra prática. O validador de mensagens deste site os mostra como dica, nunca como erro.
Mensagem de uma linha e mensagem com corpo
Para uma mudança pequena, uma linha basta: git commit -m "docs: corrige o link do README". Para explicar o porquê, use -m mais de uma vez; o Git junta cada -m como um parágrafo separado por linha em branco:
git commit -m "fix: evita travar com arquivo vazio" -m "O comando lia a primeira linha sem conferir se ela existia. Agora devolve uma lista vazia."Sem o -m, o Git abre o seu editor de texto para você escrever a mensagem inteira.
Padronizar com Conventional Commits
Se o projeto adota o padrão Conventional Commits, a primeira linha segue o formato tipo(escopo): descrição. O guia de Conventional Commits explica as 16 regras da especificação, e o gerador de mensagem de commit monta o texto e o comando git commit para você. Antes de adotar o padrão em um projeto que não é seu, olhe o histórico e o CONTRIBUTING: use o estilo que já existe.
Exemplo resolvido: de ruim a bom
| Antes | Depois |
|---|---|
arrumei | fix: evita travar com arquivo de tarefas vazio |
mudanças | docs: explica a instalação no Windows |
fix bug, update deps, rename file | três commits: fix: ..., build: atualiza dependências, refactor: renomeia utils.js |
Na terceira linha, o problema não é o texto, é o tamanho: três assuntos em um commit. Separe com git add --patch ou comitando arquivo por arquivo. Cada commit passa a poder ser entendido, revisado e, se necessário, desfeito sozinho.
Perguntas frequentes
Qual o tamanho máximo da mensagem de commit?
O Git não fixa limite. O Pro Git sugere um resumo de cerca de 50 caracteres e o corpo quebrado por volta de 72 colunas. São recomendações, tratadas neste site como regra prática, nunca como erro.
Por que usar o imperativo?
O Pro Git recomenda escrever como uma ordem, como em "Fix bug" e não "Fixed bug". Em português, o equivalente costuma ser o presente do indicativo na terceira pessoa ou o imperativo, como em "corrige o link". O importante é manter o mesmo estilo no projeto inteiro.
Como escrevo uma mensagem com mais de uma linha?
Use mais de um -m: cada um vira um parágrafo separado por linha em branco. Sem -m, o Git abre o seu editor para você escrever a mensagem inteira. O gerador de mensagem de commit deste site monta o comando para Bash e PowerShell.
O que o git diff --check faz?
Aponta espaços em branco no fim das linhas e outros descuidos nas alterações, antes do commit. O Pro Git recomenda rodar o comando para não eternizar esses erros no histórico. Foi testado aqui: ele lista a linha e o arquivo e termina com código de saída diferente de zero.
Fontes deste guia
Abertas em 11/10/2026. O texto é nosso, em português; as fontes ficam aqui com link, licença e o que foi lido.
- Pro Git, 5.2 Git Distribuído: Contribuindo com um Projeto (git-scm.com)
A página não mostra data · aberta em · reconferência: confirmada na abertura (11/10/2026) · licença do conteúdo: CC BY-NC-SA 3.0
O que lemos: As diretrizes de commit: conferir espaços em branco com git diff --check, um commit por mudança lógica, resumo de cerca de 50 caracteres, linha em branco e explicação por volta de 72 colunas, verbo no imperativo.
Como usamos: Só link e fatos (git diff --check; limites de 50 e 72 caracteres, tratados aqui como regra prática). Nenhum trecho do livro é copiado ou adaptado, por causa da cláusula NC. - Conventional Commits 1.0.0 (conventionalcommits.org)
A página não mostra data · aberta em · reconferência: confirmada na abertura (11/10/2026) · licença do conteúdo: CC BY 3.0
O que lemos: As 16 regras numeradas (tipo, escopo, ! , descrição, corpo, rodapés, BREAKING CHANGE), a ligação entre feat e fix e os números MINOR e PATCH do SemVer, a lista de tipos recomendada pelo @commitlint/config-conventional e os exemplos. A versão exibida é a 1.0.0; a página não marca nenhuma versão mais nova.
Como usamos: As regras são resumidas em português e citadas por número. Os trechos em inglês são curtos, de regras, com a fonte ao lado.
Informação geral, não é aconselhamento jurídico. Quando um guia cita uma licença de conteúdo, ela vale para a página citada, não para este site.
Continue pelos guias
Os geradores, o passo a passo e os guias ficam a um clique.
- Conventional CommitsAs 16 regras da especificação 1.0.0 resumidas, com tipos, escopo, ! e BREAKING CHANGE.
- Abrir o pull requestCompare & pull request, base e fork de origem, rascunho e como fechar uma issue pela descrição.
- Versionamento semânticoMAJOR, MINOR e PATCH: quando cada número sobe, pré-lançamentos e as regras que surpreendem.
- Mensagem de commitMonte e valide a mensagem no padrão Conventional Commits.