- Domine o Git com Elegância: Estratégias para Branches, Commits Semânticos e Dicas Essenciais
O Git é uma ferramenta essencial para controle de versão que permite aos desenvolvedores gerenciar seu código de forma eficaz. Este guia explora as melhores práticas para branches e commits no Git, combinando insights de desenvolvedores líderes na área.
| Tipo | Descrição | Origem | Exemplo |
|---|---|---|---|
| main (ou master) | Branch principal do projeto. Contém código em estado de produção. | -- | main |
| develop | Branch de desenvolvimento. Contém código em estado de pré-produção. | main | develop |
| feature/ | Para desenvolvimento de novas funcionalidades. | develop | feature/login-system |
| hotfix/ | Para correções urgentes em produção. | main | hotfix/fix-login-bug |
| release/ | Preparação para nova versão de produção. | develop | release/v1.0.0 |
| bugfix/ | Para correção de bugs em desenvolvimento. | develop | bugfix/header-alignment |
| Prática | Descrição | Exemplo | Comando Git |
|---|---|---|---|
| Nomes Descritivos | Use nomes claros e concisos | ✅ feature/user-auth❌ feature/f1 |
git checkout -b feature/user-auth |
| Kebab Case | Use hífen para separar palavras | ✅ feature/email-login❌ feature/email_login |
git checkout -b feature/email-login |
| Referência à Issue | Inclua o número da issue quando relevante | feature/123-user-profile |
git checkout -b feature/123-user-profile |
| Prefixos Padrão | Use prefixos consistentes | feature/, hotfix/, bugfix/ |
git checkout -b [prefixo]/[nome] |
| Atualizações Frequentes | Mantenha a branch sincronizada com develop | -- | git merge develop |
| Limpeza Pós-Merge | Remova branches após merge concluído | -- | git branch -d feature/concluida |
| Etapa | Ação | Comando |
|---|---|---|
| 1. Criar feature | Crie uma nova branch a partir da develop | git checkout developgit checkout -b feature/nova-func |
| 2. Desenvolver | Faça commits na sua feature branch | git add .git commit -m "✨ feat: Nova função" |
| 3. Atualizar | Mantenha sua branch atualizada com develop | git merge develop |
| 4. Finalizar | Merge da feature em develop | git checkout developgit merge feature/nova-func |
| Situação | Ação Recomendada | Comando |
|---|---|---|
| Conflito no merge | Resolver localmente antes do push | git merge developResolver conflitos git add .git commit -m "🔀 merge: Resolve conflitos" |
| Conflito no rebase | Resolver um commit por vez | git rebase developResolver conflitos git add .git rebase --continue |
| Branch | Proteção | Motivo |
|---|---|---|
| main | Require pull request | Evita mudanças diretas em produção |
| develop | Require code review | Mantém qualidade do código |
| all | Require status checks | Garante que testes passem |
De acordo com a documentação do Conventional Commits, commits semânticos são uma convenção que define regras para criar um histórico de commit explícito, facilitando a criação de ferramentas automatizadas e a compreensão das alterações por toda a equipe.
- Tipo: Identifica a natureza da mudança (feat, fix, docs, etc.)
- Escopo: (opcional) Indica a seção do código afetada
- Descrição: Resumo conciso da mudança
- Corpo: (opcional) Descrição detalhada
- Rodapé: (opcional) Metadados como revisor e referências
Exemplo:
feat(login): adiciona autenticação com Google
Implementa OAuth2 para login com Google
- Adiciona dependências necessárias
- Configura rotas de autenticação
- Atualiza UI com novo botão
Reviewed-by: João Silva
Refs #123
feat- Novo recursofix- Correção de bugdocs- Documentaçãostyle- Formatação de códigorefactor- Refatoração de códigotest- Testeschore- Tarefas de build, admin, etc.perf- Melhorias de performanceci- Mudanças na integração contínuabuild- Modificações em arquivos de buildraw- Mudanças em dados/configscleanup- Limpeza de códigoremove- Remoção de arquivos/recursos
| Tipo de Commit | Emoji | Palavra-chave |
|---|---|---|
| Acessibilidade | ♿ :wheelchair: |
|
| Adicionando um teste | ✅ :white_check_mark: |
test |
| Adicionando uma dependência | ➕ :heavy_plus_sign: |
build |
| Alterações de revisão de código | 👌 :ok_hand: |
style |
| Animações e transições | 💫 :dizzy: |
|
| Bugfix | 🐛 :bug: |
fix |
| Comentários | 💡 :bulb: |
docs |
| Commit inicial | 🎉 :tada: |
init |
| Configuração | 🔧 :wrench: |
chore |
| Deploy | 🚀 :rocket: |
|
| Documentação | 📚 :books: |
docs |
| Em progresso | 🚧 :construction: |
|
| Estilização de interface | 💄 :lipstick: |
feat |
| Infraestrutura | 🧱 :bricks: |
ci |
| Lista de ideias (tasks) | 🔜 :soon: |
|
| Mover/Renomear | 🚚 :truck: |
chore |
| Novo recurso | ✨ :sparkles: |
feat |
| Package.json em JS | 📦 :package: |
build |
| Performance | ⚡ :zap: |
perf |
| Refatoração | ♻️ :recycle: |
refactor |
| Removendo um arquivo | 🗑️ :wastebasket: |
remove |
| Removendo uma dependência | ➖ :heavy_minus_sign: |
build |
| Responsividade | 📱 :iphone: |
|
| Revertendo mudanças | 💥 :boom: |
fix |
| Segurança | 🔒️ :lock: |
|
| SEO | 🔍️ :mag: |
|
| Tag de versão | 🔖 :bookmark: |
|
| Teste de aprovação | ✔️ :heavy_check_mark: |
test |
| Testes | 🧪 :test_tube: |
test |
| Texto | 📝 :pencil: |
|
| Tipagem | 🏷️ :label: |
|
| Tratamento de erros | 🥅 :goal_net: |
|
| Limpeza de código | 🧹 :broom: |
cleanup |
| Dados | 🗃️ :card_file_box: |
raw |
git commit -m "🎉 init: Commit inicial"
git commit -m "✨ feat: Sistema de login"
git commit -m "🐛 fix: Corrige loop infinito"
git commit -m "📚 docs: Atualiza README"
git commit -m "♻️ refactor: Simplifica função"
| Comando | Descrição |
|---|---|
git clone url-do-repositorio |
Clona um repositório remoto |
git init |
Inicializa um novo repositório Git |
git add . |
Adiciona todos os arquivos para stage |
git commit -m "mensagem" |
Registra alterações com mensagem |
git branch -M main |
Renomeia a branch atual para main |
git remote add origin url |
Adiciona um repositório remoto |
git push -u origin main |
Envia commits e configura upstream |
git fetch |
Busca atualizações sem integrar |
git pull origin main |
Atualiza branch local com remota |
git push --force-with-lease |
Force push seguro |
git revert commit-id |
Reverte um commit específico |
git reset --hard commit-id |
Redefine para commit específico |
git commit --amend |
Altera último commit |
git cherry-pick commit-hash |
Aplica commit específico |
git init
git remote add origin git@github.com:usuario/projeto.git
git branch -M main
git push -u origin mainfork- Cópia de um repositório para sua contaissues- Ferramenta para gerenciar tarefas/bugspull request- Solicitação para integrar alteraçõesgist- Compartilhamento de trechos de código
Créditos:
🕹 Feito por Alvaro Navega
Insights dos artigos:
Padrões de commits do artigo de Iuri Silva
Entendendo as Nomenclaturas de Commits no Git do artigo de Augusto Simionato