Branches, commits e Pull Requests que passam em revisão
Objetivos desta aula
- Adotar um fluxo de branches simples
- Escrever commits e PRs claros
- Configurar proteção da main
Para a maioria dos times, trunk-based com branches curtas vence fluxos complexos: você cria feat/algo, entrega em menos de dois dias, abre PR, o CI valida e o merge acontece. Branches longas acumulam conflito e transformam integração em evento traumático.
Commits são documentação. Conventional Commits (feat, fix, chore, docs, refactor) permitem gerar changelog automático e dizem ao leitor a intenção da mudança. Um bom commit responde o que mudou e por quê; o como está no diff.
Proteger a main é decisão de engenharia, não burocracia: exigir PR, revisão e checks impede que código sem teste chegue à produção. É também o ponto onde CI/CD começa a ter valor real.
1. O modelo mental do Git
O Git guarda snapshots, não diferenças. Cada commit aponta para o snapshot e para o commit pai; uma branch é apenas um ponteiro móvel para um commit. Entender isso elimina o medo: criar branch é barato e quase nada se perde de verdade.
2. As três áreas
Working tree (seus arquivos), staging (o que vai no próximo commit, via git add) e repositório (commits). git add -p permite escolher trechos, produzindo commits pequenos e focados.
3. Mensagens de commit que ajudam no incidente
Use o padrão Conventional Commits: feat(api): adiciona endpoint /orders, fix(nginx): aumenta proxy_read_timeout. Linha de assunto no imperativo, até ~72 caracteres, e corpo explicando o porquê. Ferramentas geram changelog e versão a partir disso.
4. Fluxo de trabalho com trunk-based
Branches curtas (horas ou poucos dias) saindo da main, PR pequeno, revisão, CI verde, merge. Branches longas acumulam conflito e risco. Feature flags permitem integrar código incompleto sem ativá-lo.
5. Pull Request que passa em revisão
- Título claro e descrição com contexto, mudança e como testar
- Menos de ~400 linhas alteradas
- CI verde antes de pedir revisão
- Screenshots ou saída de comandos quando for infra
- Proteção de branch: revisão obrigatória e checks exigidos
6. Checagem final
Você deve criar branch, fazer commits atômicos com add -p, abrir PR bem descrito e explicar o que é uma branch por dentro.
Na prática
Fluxo diário
bash
git switch -c feat/health-endpoint
git add src/routes/health.js
git commit -m "feat(api): adiciona endpoint /health com checagem de banco"
git push -u origin feat/health-endpoint
gh pr create --fill --base main
gh pr checks
gh pr merge --squash --delete-branch
git log --oneline --graph --decorate -10Ciclo completo de uma mudança
bash
git switch main && git pull --ff-only
git switch -c fix/nginx-timeout
git add -p # escolhe trechos
git commit -m "fix(nginx): ajusta proxy_read_timeout para 15s" \
-m "p99 da rota /orders medido em 11s; timeout anterior de 5s gerava 504."
git push -u origin fix/nginx-timeout
gh pr create --fill --base main # abre o PR com a mensagem do commitPor que isso importa
Pipelines, GitOps e rollback dependem de histórico previsível. Repositório caótico contamina toda a automação.
Erro comum
Commitar tudo em um único commit gigante com mensagem 'ajustes'.
Dica de produção
Squash merge mantém a main limpa e facilita revert de uma mudança inteira.
Alerta de segurança
Ative varredura de segredos no repositório; token commitado deve ser revogado, não apenas removido.
Pergunta de entrevista
Como você organizaria o fluxo de branches de um time de cinco pessoas?
Glossário
- trunk-based
- Estratégia com branches curtas integradas frequentemente na main.
- squash merge
- Merge que condensa todos os commits do PR em um único commit.
- snapshot
- Foto completa do estado dos arquivos em um commit.
- HEAD
- Ponteiro para o commit/branch atualmente em uso.
- Conventional Commits
- Convenção de mensagens como feat:, fix:, chore: que permite automação.
- trunk-based
- Estratégia de branches curtas integradas com frequência à main.
Conexão com o CloudShop
Abrir o PR do endpoint /health no cloudshop-app com CI obrigatório.
Quiz da aula
1. Qual prática reduz conflitos de merge?
2. O que é uma branch no Git?
3. Para que serve git add -p?
Minhas anotações
Salvo automaticamente neste navegador.