Projeto guiado: da branch à release
Junta tudo — fundamentos e intermediário — num fluxo só, do jeito que acontece de verdade num time.
As lições anteriores mostraram cada ferramenta isolada. Na prática, um dia de trabalho normal usa várias delas em sequência, sem parar pra pensar em qual comando é "de fundamentos" e qual é "avançado". Este projeto guiado percorre o fluxo completo: criar a branch, trabalhar, limpar o histórico, abrir PR, mergear e publicar uma release — como se você estivesse implementando uma feature real de ponta a ponta.
1. Sincronizar e criar a branch
git checkout main
git pull origin main # garante que main está atualizada antes de ramificar
git switch -c feature/cupom-desconto2. Trabalhar e commitar em pedaços pequenos
# implementa o formulário de cupom...
git add src/checkout/cupom-form.tsx
git commit -m "wip: formulário de cupom"
# implementa a validação...
git add src/checkout/validar-cupom.ts
git commit -m "wip: valida formato do cupom"
# corrige um typo que só percebeu depois
git add src/checkout/cupom-form.tsx
git commit -m "corrige typo no placeholder"
# integra os dois
git add src/checkout/checkout-page.tsx
git commit -m "integra validação de cupom no checkout"Quatro commits, alguns com mensagem provisória ("wip") — normal durante o trabalho. Ninguém além de você precisa ver essa história de tentativa, então antes de abrir o PR vale limpar.
3. Limpar o histórico com rebase interativo
git rebase -i HEAD~4pick a1b2c3d wip: formulário de cupom
squash e4f5a6b wip: valida formato do cupom
squash 7c8d9e0 corrige typo no placeholder
squash f0a1b2c integra validação de cupom no checkoutComo esses commits só existem localmente (ainda não houve push), reescrever é seguro — é exatamente o caso de uso descrito na lição de rebase. O resultado: um commit único, com mensagem final clara.
git log --oneline -14. Push e Pull Request
git push -u origin feature/cupom-descontoDepois do push, abre-se o PR no GitHub: feature/cupom-desconto → main. O CI roda, alguém revisa, pede um ajuste pequeno — você commita a correção normalmente na mesma branch e dá push de novo (sem precisar de rebase agora, porque a branch já foi compartilhada no PR).
5. Squash merge — main só vê o resultado final
git checkout main
git pull origin main"Squash merge" (opção comum no botão de merge do GitHub) junta todos os commits do PR — mesmo que tivessem sobrado vários — num único commit em main. Combinado com o rebase que você já fez, o histórico de main fica com um commit por feature, fácil de ler meses depois.
6. Tag de release
Depois de acumular algumas features mergeadas, chega o momento de publicar uma versão. A feature de cupom é funcionalidade nova e compatível com o que já existia — segundo semver, isso incrementa o MINOR.
git tag -a v1.6.0 -m "Adiciona cupom de desconto no checkout"
git push origin v1.6.0No GitHub, essa tag vira a base de uma Release, com as notas do que mudou desde a v1.5.0 — o fluxo inteiro, de uma linha de código nova até uma versão publicada, rastreável do primeiro commit até a tag final.
Resumo do fluxo
git pull origin main → sincroniza antes de começar
git switch -c feature/x → cria a branch de trabalho
...commits pequenos durante o desenvolvimento...
git rebase -i HEAD~N → limpa o histórico local (só antes do push)
git push -u origin feature/x → compartilha a branch
Pull Request → review → CI → checagem antes de afetar main
Squash merge → main recebe 1 commit limpo por feature
git tag -a vX.Y.Z → marca a versão publicada
git push origin vX.Y.Z → compartilha a tagExercício
Você fez 6 commits "wip" numa branch de feature que já foi pushada e já está com um PR aberto, com um colega revisando. Você quer limpar o histórico antes do merge. É seguro rodar git rebase -i HEAD~6 e depois git push --force nessa branch? Por quê?