📝 Guia Definitivo: Crie Commits Claro e Organizados com o Conventional Commit Format e Simplifique Seu Workflow
- #GitHub
- #Git
Manter commits claros e consistentes é essencial para um bom desenvolvimento colaborativo. Este guia detalhado cobre o formato Angular Commit Message Format, incluindo as seções Header, Body e Footer.
🛠️ Header
O header contém três elementos principais:
- type: O tipo de mudança no código (obrigatório).
- scope: O escopo que o commit afeta (opcional, mas recomendado).
- short summary: Resumo da mudança em no máximo 72 caracteres (obrigatório).
Formato do Header
<type>(<scope>): <short summary>
Valores Aceitos para type
- build: Alterações que afetam o sistema de build ou dependências externas.
- ci: Alterações nos scripts ou configurações de CI (Integração Contínua).
- docs: Mudanças na documentação apenas.
- feat: Introdução de uma nova funcionalidade.
- fix: Correção de um bug.
- perf: Melhorias de desempenho.
- refactor: Alteração de código que não corrige bugs nem adiciona funcionalidades.
- test: Adição ou modificação de testes.
Exemplos de scope
- animations,bazel,benchpress,common,compiler,compiler-cli,core,elements,forms,http,language-service,
- localize,platform-browser,platform-browser-dynamic,platform-server,router,service-worker,upgrade,zone.js,
- packaging,changelog,docs-infra,migrations,ngcc,ve,devtools
Exemplo de Header
feat(forms): add custom validation feature
📖 Body
O body é uma explicação detalhada do commit. Ele deve responder ao "por quê" e "como" a mudança foi feita.
Regras para o Body
- Comece com um verbo no presente para explicar o impacto.
- Use frases curtas e claras.
- Limite cada linha a 72 caracteres para facilitar a leitura.
Exemplo de Body
Adds the ability to include custom validators in reactive forms.
This commit introduces a new API for adding validators directly to
form controls. The feature supports synchronous and asynchronous
validators.
🚩 Footer
O footer contém informações adicionais, como:
- Breaking Changes: Declara mudanças que quebram compatibilidade.
- Closes/Fixes: Relaciona o commit com issues no GitHub.
Formato do Footer
BREAKING CHANGE: <description>
Closes #<issue-number>
Exemplo de Footer
BREAKING CHANGE: This changes the default validation strategy
in reactive forms, which might break existing applications.
Closes #1234
🔧 Técnicas para Criar Commits Perfeitos
Utilizar um Template Padrão
Configure templates de mensagem de commit no Git com instruções claras para Header, Body e Footer.
# Configuração do template global
git config --global commit.template ~/.git-commit-template.txt
Crie o arquivo .git-commit-template.txt
com o formato do Angular Commit:
<type>(<scope>): <short summary>
# Body
<detailed explanation of the commit>
# Footer
<breaking change or references>
Automação com Hooks do Git
Use hooks como prepare-commit-msg
para pré-preencher mensagens com base em convenções:
- Husky: Integra hooks em projetos com configurações fáceis.
- Combine com ferramentas como Commitizen para garantir que os commits sigam um padrão.
Documentação para a Equipe
Crie um guia interno ou adote convenções claras como o Angular Commit Format, para que toda a equipe siga o mesmo padrão.
🛠️ Ferramentas para Ajudar com Commits
1. Commitizen
- Ferramenta CLI que guia o processo de commit no formato correto.
- Garante conformidade com padrões como o Angular Commit Format.
Instalação:
npm install -g commitizen
Uso:
git cz
Plugins úteis:
cz-conventional-changelog
: Segue o padrão do Angular.
2. AI Assistants
- GitHub Copilot: Pode sugerir mensagens de commit baseadas em mudanças feitas no código.
- Use comentários no código para explicar mudanças; o Copilot sugere commits baseados nisso.
- OpenAI API ou ChatGPT: Gere mensagens de commit detalhadas com base nos diffs do código.
- Integração com ferramentas de linha de comando ou editores como VS Code.
3. Linting de Commits
- CommitLint: Valida automaticamente mensagens de commit para verificar se seguem o formato correto.
- Integração com Husky para rodar automaticamente nos commits:
npm install --save-dev @commitlint/{config-conventional,cli}
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
4. Change Detection & Templates
- Semantic Release: Automatiza o versionamento e changelogs baseados em mensagens de commit.
- Útil para grandes projetos onde commits seguem padrões rígidos.
- GitMoji: Usa emojis para identificar visualmente o tipo de commit.
- CLI para adicionar emojis diretamente no commit:
npm install -g gitmoji-cli
gitmoji -c
5. Editor Plugins
- VS Code Extensions:
Git Commit Template
: Ajuda a preencher mensagens de commit com templates padrão.Conventional Commits
: Oferece suporte interativo para gerar mensagens no formato Angular.- JetBrains IntelliJ:
- Suporte para convenções de commits com configuração personalizada.
- Plugins como
GitToolBox
fornecem histórico e sugestões.
6. Automação com IA
- GPT Commit Message Generator:
- Ferramenta CLI que usa GPT para gerar mensagens de commit:
- OpenCommit: Analisa git diff e cria mensagens contextuais.
Instalação:
npm install -g opencommit
opencommit
- Pode ser configurado com sua própria chave API do OpenAI.
🚀 Fluxo Recomendado
- Escreva o código.
- Use
git add
para preparar os arquivos. - Execute:
git cz
ou:
opencommit
- Valide com CommitLint antes de finalizar:
npm run lint
- Finalize com
git commit
ougit push
.
Com essas ferramentas e técnicas, é possível garantir que seus commits sejam bem formatados, consistentes e informativos!
✅ Exemplo Completo
feat(forms): add custom validation feature
Adds the ability to include custom validators in reactive forms.
This commit introduces a new API for adding validators directly to
form controls. The feature supports synchronous and asynchronous
validators.
BREAKING CHANGE: This changes the default validation strategy
in reactive forms, which might break existing applications.
Closes #1234
🧾 Checklist para um Commit Perfeito
🔹 Header
- Está no formato
<type>(<scope>): <short summary>
? - O resumo está claro, direto e no presente?
🔹 Body
- Explicou o que foi alterado, por quê e como?
- Cada linha tem no máximo 72 caracteres?
🔹 Footer
- Indicou Breaking Changes ou issues relacionadas?
Seguindo este guia, você manterá seus commits consistentes, claros e fáceis de rastrear! 🌟