Fazer bons commits em um projeto de desenvolvimento de software é crucial por várias razões. Eles ajudam a manter um histórico de mudanças claro e organizado, facilitando a navegação pelo histórico do projeto. Em equipes de desenvolvimento, commits bem feitos facilitam a colaboração, permitindo que outros membros da equipe entendam rapidamente o propósito de uma mudança e como ela se integra ao restante do projeto. Bons commits também permitem reverter mudanças específicas sem afetar o restante do projeto, o que é particularmente útil para identificar e corrigir bugs.

Commits bem descritos funcionam como uma forma de documentação, registrando o raciocínio por trás de mudanças e decisões de design, o que é valioso para desenvolvedores futuros que possam precisar compreender o contexto das alterações. Além de uma mensagem clara e descritiva, um bom commit precisa ter um título conciso com um resumo curto que descreva a mudança de maneira clara e precisa. Também é importante considerar o escopo e o tamanho de cada commit; cada commit deve ter um escopo limitado e focado em uma única tarefa ou objetivo, facilitando a revisão e a reversão de mudanças, se necessário. Eles devem ser pequenos o suficiente para que a revisão aconteça de forma fácil, mas ao mesmo tempo, grandes o suficiente para serem significativos.

O Conventional Commits é uma convenção para escrever mensagens de commit que ajuda a criar um histórico de commits claro, consistente e estruturado. Essa convenção especifica um formato simples para as mensagens de commit, o que traz vários benefícios, como padronização, automatização e clareza. Alguns benefícios específicos incluem histórico mais legível, geração automática de changelogs, versão semântica automatizada (podemos usar as mensagens dos commits para determinar automaticamente a nova versão do software - major, minor, patch) e integração com ferramentas de CI/CD.

Abaixo você confere o guia do Conventional Commits que preparei.

1. Estrutura básica de um commit

Um commit na convenção Conventional Commits possui a seguinte estrutura:

<type>(<scope>): <message>
  • type (tipo): Define a natureza da mudança (obrigatório).
  • scope (escopo): Indica a área do projeto afetada pela mudança (opcional).
  • message (mensagem): Descreve a mudança realizada de forma concisa e clara (obrigatório).

2. Tipos de commits

Os tipos mais comuns de commits incluem:

  • feat: Uma nova funcionalidade ou recurso.
  • fix: Correção de bugs.
  • chore: Atualizações de tarefas de build, configurações ou outras tarefas de manutenção.
  • docs: Alterações na documentação.
  • style: Ajustes de formatação, semântica ou estilo de código.
  • refactor: Refatoração do código existente, sem adição de funcionalidades ou correção de bugs.
  • test: Adição ou modificação de testes.

3. Exemplos de commit

  • feat(auth): adiciona autenticação via token JWT
  • fix(button): corrige erro de posicionamento em botões
  • docs(readme): atualiza documentação com exemplos
  • chore(deps): atualiza bibliotecas para as versões mais recentes
  • style(header): ajusta estilos do cabeçalho
  • refactor(api): simplifica lógica de roteamento
  • test(login): adiciona testes para o sistema de login

4. Escopo (Scope)

O escopo ajuda a identificar a área específica do projeto afetada pela mudança. Pode ser uma funcionalidade, um módulo, um componente, etc.

5. Mensagem do commit

  • Use linguagem clara e concisa.
  • Comece com uma letra maiúscula.
  • Não termine a mensagem com ponto final.
  • Se necessário, forneça detalhes adicionais no corpo da mensagem.

6. Convenções adicionais

  • Breaking Changes: Se houver alterações incompatíveis, adicione uma seção de “Breaking Changes” após a mensagem do commit para indicar as mudanças que podem impactar os usuários.

7. Exemplo de commit com BREAKING CHANGES

feat(api): adiciona endpoint de busca

Adiciona um novo endpoint de busca na API.

BREAKING CHANGE: Altera a estrutura de resposta da busca.

Não esqueça de consultar a documentação oficial do Conventional Commits para saber mais.
Até a próxima! 🙂


Jonatha Fernandes
Desenvolvedor Web

🔗 Saiba mais sobre mim