Article image
William Silva
William Silva18/12/2024 08:51
Compartilhe

📝 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

  1. Escreva o código.
  2. Use git add para preparar os arquivos.
  3. Execute:
git cz

ou:

opencommit
  1. Valide com CommitLint antes de finalizar:
npm run lint
  1. Finalize com git commit ou git 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! 🌟

Compartilhe
Comentários (1)
Lilian Santos
Lilian Santos - 18/12/2024 10:40

Só as orientações sobre a estrutura e o checklist ao final já fazem desse artigo muito muito informativo! Principalmente pra quem está começando e as dicas de ferramentas e automação deixam o tópico ainda mais avançado.

Valeu por compartilhar esse conhecimento! Depois dos cursos que fiz na DIO sobre Git e GitHub comecei a ir treinando os commits mais convencionais, trabalhando melhor o header e o body... E uma satisfação fazer referência a uma issue solucionada, além de treinar o inglês rsrs

Uma ferramenta legal pra visualizar branchs e commits é o gitk.

Particularmente, gostei muito do curso com Otávio Reis Perkles, muito didático e muitas informações de forma descomplicada.

Ótimo assunto para compartilhar experiência. Parabéns pelo artigo! ✨🚀