# Padronização e Clareza no Controle de Versão

## O que é e para que serve

**Conventional Commits** é uma convenção para escrever mensagens de commit de forma **estruturada e padronizada**. Ele define um formato claro para facilitar a leitura, automação de processos e compreensão do histórico de mudanças em um projeto.

Essa convenção é especialmente útil em projetos com múltiplos colaboradores, pois melhora:

* A **comunicação** entre os membros da equipe;
    
* A **geração automatizada de changelogs**;
    
* A **identificação de versões semânticas (SemVer)**;
    
* A integração com ferramentas de CI/CD (como GitHub Actions e Semantic Release).
    

A ideia central é prefixar as mensagens com **tipos de alterações** (como `feat`, `fix`, `docs`, etc.), seguidos de uma breve descrição.

Por exemplo:

```bash
feat: adicionar página de login
```

[![](https://cdn.hashnode.com/res/hashnode/image/upload/v1768404709592/f715d212-83f8-4f41-81da-f2c861de5769.jpeg align="center")](https://www.udemy.com/course/logica-de-programacao-com-pascalzim/?referralCode=E547897C16AD4FF23AED)

## Iniciando o uso

Para adotar a convenção Conventional Commits no seu projeto, siga estes passos:

1. **Familiarize-se com a estrutura padrão:**
    
    ```bash
    <tipo>[!][(escopo)]: <descrição curta>
    ```
    
    Onde:
    
    * `tipo`: tipo da mudança (`feat`, `fix`, `docs`, etc.).
        
    * `escopo` (opcional): onde a mudança ocorreu (ex: `login`, `api`, `header`).
        
    * `!`: indica uma **mudança que quebra compatibilidade** (breaking change).
        
    * `descrição curta`: explicação clara e objetiva da mudança.
        
2. **Tipos mais comuns:**
    
    * `feat`: uma nova funcionalidade
        
    * `fix`: correção de bug
        
    * `docs`: mudanças na documentação
        
    * `style`: ajustes de formatação (espaços, ponto e vírgula, etc.)
        
    * `refactor`: refatorações sem alterar comportamento
        
    * `test`: adição ou ajuste de testes
        
    * `chore`: tarefas que não afetam o código de produção (ex: scripts, configs)
        
3. **Ferramentas úteis:**
    
    * `commitlint`: valida mensagens de commit.
        
    * `husky`: aplica hooks no Git para rodar o commitlint automaticamente.
        
    * `semantic-release`: gera changelogs e publica versões automaticamente com base nos commits.
        

## Exemplos práticos

Aqui estão alguns exemplos de mensagens de commit seguindo a convenção:

```bash
feat(auth): adicionar autenticação via Google
fix(api): corrigir erro 500 ao buscar usuários inativos
docs(readme): atualizar instruções de instalação
style(header): remover espaço extra no CSS
refactor(user-service): otimizar função de login
test(profile): adicionar testes para edição de perfil
chore(ci): configurar pipeline do GitHub Actions
```

**Breaking changes:**

```bash
feat!: remover suporte à versão antiga da API
```

Ou, em uma mensagem de commit multi-linha:

```bash
refactor(core): remover função obsoleta de validação

BREAKING CHANGE: a função validateOldInput foi removida e substituída por validateInput.
```

[![](https://cdn.hashnode.com/res/hashnode/image/upload/v1768404723951/70d1002e-0439-47d5-943e-121381e5a3c7.jpeg align="center")](https://www.udemy.com/course/logica-de-programacao-com-pascalzim/?referralCode=E547897C16AD4FF23AED)

## Conclusão

Adotar a convenção **Conventional Commits** é um pequeno passo que traz grandes benefícios para o desenvolvimento de software. A padronização das mensagens melhora a colaboração, facilita automações e garante um histórico mais compreensível e útil.

Seja em projetos pessoais ou em grandes equipes, aplicar essa convenção contribui diretamente para a **manutenibilidade**, **escalabilidade** e **profissionalismo** do código.

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Conventional Commits - Official Specification <a target="_self" rel="noopener noreferrer nofollow" href="https://www.conventionalcommits.org/en/v1.0.0/#summary" style="pointer-events: none">https://www.conventionalcommits.org/en/v1.0.0/#summary</a></div>
</div>

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Commitlint Documentation - <a target="_self" rel="noopener noreferrer nofollow" href="https://commitlint.js.org/#/" style="pointer-events: none">https://commitlint.js.org/#/</a></div>
</div>

<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Semantic Release Guide - <a target="_self" rel="noopener noreferrer nofollow" href="https://semantic-release.gitbook.io/" style="pointer-events: none">https://semantic-release.gitbook.io/</a></div>
</div>
