π 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! π