Commit
Um commit é a menor unidade de história que alguém lerá daqui a um ano, sob pressão, durante um incidente. Otimize para esse leitor.
Fluxo de Trabalho
- Olhe antes de commitar:
git status,git diff --staged,git diff. Nunca commite às cegas. - Verifique se há algo que não pode ir: credenciais, arquivos
.env, chaves privadas, binários grandes, prints de depuração, código comentado. Se encontrar, pare e avise o usuário. Consulte a habilidadesecrets-hygiene. - Selecione deliberadamente. Prefira
git add <caminhos>em vez degit add -A. Uma alteração lógica por commit; se o diff mistura uma refatoração e uma funcionalidade, divida-o. - Escreva a mensagem no formato abaixo.
- Commite com um heredoc para que corpos de várias linhas sobrevivam ao shell:
git commit -m "$(cat <<'MSG'
feat(auth): adiciona login OIDC para o console administrativo
Substitui a senha compartilhada de autenticação básica por OIDC com suporte do Cognito, permitindo
que o acesso seja revogado por usuário. As sessões expiram após 8h.
Refs: PLAT-412
MSG
)"
- Confirme com
git log -1 --stat. Nunca faça amend ou force-push a menos que o usuário peça explicitamente.
Formato da Mensagem
<tipo>(<escopo>): <resumo imperativo, ≤72 caracteres, sem ponto final>
<por que essa mudança existe, não o que o diff mostra — o diff já mostra isso>
<rodapé: Refs/Closes ticket, BREAKING CHANGE: ..., Co-Authored-By>
Tipos: feat, fix, refactor, perf, test, docs, build, ci, chore, revert.
Escopo é o módulo, serviço ou stack alterado (api, terraform/vpc, ci). Omita quando a mudança for global.
O corpo importa mais que o resumo. Responda "por que agora?" e "o que consideramos?" em duas a quatro frases. Um commit de uma linha é suficiente para alterações triviais.
Exemplos
Entrada: corrigiu o ponteiro nulo quando o bucket S3 não tem tags
Saída: fix(s3-inventory): manipular buckets sem conjunto de tags
Entrada: atualizou o provedor terraform aws de 5.40 para 5.60, necessário para o novo atributo de runtime lambda Saída:
build(terraform): atualiza provedor aws para 5.60
Necessário para `aws_lambda_function.runtime = "python3.13"`. Nenhum diff
de recurso no `terraform plan` em todas as stacks.
Quando $ARGUMENTS é fornecido
Trate-o como a sugestão de escopo ou resumo do usuário, mas ainda inspecione o diff e corrija se não corresponder ao que realmente mudou.