Uma branch é uma linha de desenvolvimento independente. Permite trabalhar numa nova funcionalidade ou numa correção sem tocar no código estável que os outros usam.
Pense numa branch como num rascunho separado. Pode fazer nela todas as tentativas que quiser; enquanto não fundir, o trabalho dos outros não é afetado.
Sem branches, toda a equipa escreveria no mesmo ficheiro ao mesmo tempo: caos garantido. Com as branches, cada um avança no seu corredor e depois junta-se com limpeza.
Os comandos de base já vistos no módulo 01:
# Criar uma branch e mudar para ela
git switch -c feature/login
# Listar as branches
git branch
# Voltar a main
git switch main| Ação | Comando moderno | Sintaxe antiga |
|---|---|---|
| Criar + mudar | git switch -c nom | git checkout -b nom |
| Mudar | git switch nom | git checkout nom |
| Listar | git branch | git branch |
| Apagar | git branch -d nom | git branch -d nom |
🔧 Mini-exercício — Escreva o comando moderno para criar uma branch feature/login e mudar para ela de uma só vez.
git switch -c feature/login (equivalente à sintaxe antiga git checkout -b feature/login).
Numa equipa, não se criam branches ao acaso: dá-se-lhes um papel e um nome convencional. Eis os tipos mais difundidos.
| Tipo de branch | Prefixo usual | Papel | Duração de vida |
|---|---|---|---|
| Principal | main (ou master) | Código em produção, sempre estável | Permanente |
| Integração | develop | Reúne as funcionalidades em curso | Permanente |
| Funcionalidade | feature/ | Desenvolver uma nova funcionalidade | Curta |
| Versão | release/ | Estabilizar antes de uma entrada em produção | Curta |
| Corretivo urgente | hotfix/ | Corrigir um bug crítico em produção | Muito curta |
Exemplos de nomes realistas:
feature/ajout-paiement-stripe
feature/dashboard-utilisateur
release/1.4.0
hotfix/correction-faille-loginUma boa convenção de nomes é documentação gratuita: só pelo nome da branch, a equipa sabe do que se trata.
🔧 Mini-exercício — Tem de corrigir com urgência uma falha de início de sessão em produção. Que prefixo de branch usa, e proponha um nome completo.
O prefixo hotfix/ (correção urgente a partir de main). Exemplo: hotfix/correction-faille-login.
O Git Flow é uma estratégia estruturada introduzida por Vincent Driessen em 2010. Assenta em duas branches permanentes (main e develop) e três tipos de branches temporárias (feature, release, hotfix).
O ciclo típico:
develop para criar uma branch feature/*.feature é fundida em develop.release/* para estabilizar.release é fundida em main (e etiquetada) e em develop.hotfix/* a partir de main e depois funde-se em main e develop.# Iniciar uma funcionalidade (sem a extensão git-flow)
git switch develop
git switch -c feature/panier
# ... trabalho + commits ...
git switch develop
git merge feature/panier
git branch -d feature/panier| Vantagens | Inconvenientes |
|---|---|
| Muito estruturado, papéis claros | Pesado, muitas branches |
| Ideal para versões planeadas | Pouco adequado à implantação contínua |
| Separa nitidamente desenvolvimento e produção | Fusões complexas, risco de conflitos |
O Git Flow brilha em software entregue por versões (apps móveis, software instalado). Para um sítio web implantado 10 vezes por dia, torna-se um travão.
O GitHub Flow é uma estratégia simples e leve, pensada para a implantação contínua. Uma só branch permanente: main. Todo o resto passa por branches feature curtas e por pull requests.
As regras de ouro:
main é sempre implantável.main.main.main.git switch main
git pull
git switch -c feature/filtre-recherche
# ... commits ...
git push -u origin feature/filtre-recherche
# → abrir uma Pull Request no GitHub| Vantagens | Inconvenientes |
|---|---|
| Simples, poucas branches | Pressupõe uma boa cobertura de testes |
| Perfeito para a web / SaaS | Menos adequado a várias versões a manter |
| Favorece as pequenas entregas frequentes | Exige disciplina na qualidade de main |
O GitHub Flow é provavelmente o melhor ponto de partida para uma equipa moderna: estrutura suficiente para colaborar, leveza suficiente para ir depressa.
🔧 Mini-exercício — Em GitHub Flow, escreva os dois comandos para partir de um main atualizado antes de criar a sua branch de trabalho.
git switch main
git pullSó depois: git switch -c feature/....
O Trunk-Based Development (desenvolvimento no tronco) leva a simplicidade ainda mais longe: toda a gente integra o seu trabalho numa única branch (o trunk, ou seja main) com muita frequência — idealmente várias vezes por dia.
Princípios-chave:
# Ciclo ultracurto
git switch main
git pull
# pequena alteração...
git commit -am "Adiciona o botão de exportação"
git push # integrado no tronco minutos depois| Vantagens | Inconvenientes |
|---|---|
| Integração contínua verdadeira | Exige uma CI sólida e rápida |
| Evita os « merges do inferno » | Exige muita disciplina |
| Prática das equipas muito performantes (Google, etc.) | Feature flags a gerir |
O pior inimigo das equipas Git são as branches que vivem semanas. Quanto mais tarde se integra, mais dolorosa é a fusão. O trunk-based resolve isto ao integrar cedo e com frequência.
🔧 Mini-exercício — Em Trunk-Based, como integra uma funcionalidade não concluída sem bloquear os outros nem criar uma branch longa?
Mascara-se o código inacabado atrás de um feature flag (bandeira de funcionalidade): fica integrado no tronco mas desativado para os utilizadores.
Não existe estratégia universal: a boa escolha depende do tipo de produto, da maturidade da equipa e da frequência de implantação.
| Critério | Git Flow | GitHub Flow | Trunk-Based |
|---|---|---|---|
| Branches permanentes | 2 (main + develop) | 1 (main) | 1 (main) |
| Complexidade | Elevada | Baixa | Muito baixa |
| Frequência de entrega | Por versões | Contínua | Muito contínua |
| Duração das branches | Longa | Curta | Muito curta (< 1 d) |
| Testes automatizados exigidos | Desejáveis | Importantes | Indispensáveis |
| Caso ideal | Apps versionadas, móvel | Web / SaaS, equipa média | Equipa madura, CI forte |
Conselho: a maior parte das equipas deveria começar pelo GitHub Flow. Oferece o melhor compromisso simplicidade / segurança. Migra-se para o trunk-based quando a CI está madura, ou para o Git Flow só se o produto impuser versões.
Para que serve principalmente uma branch Git?
a) Para salvaguardar o repositório na cloud
b) Para trabalhar de forma isolada sem afetar o código estável
c) Para comprimir os ficheiros
d) Para apagar o histórico
✅ Resposta: b) — Uma branch é uma linha de desenvolvimento independente que isola o trabalho até à fusão.
Quantas branches permanentes o Git Flow utiliza?
a) Uma só (main)
b) Duas (main e develop)
c) Nenhuma
d) Uma por programador
✅ Resposta: b) — O Git Flow assenta em duas branches permanentes: main (produção) e develop (integração).
Qual a estratégia mais adequada a um sítio web implantado várias vezes por dia?
a) Git Flow
b) GitHub Flow ou Trunk-Based
c) Nenhuma branch de todo
d) Uma branch por ano
✅ Resposta: b) — O GitHub Flow (e ainda mais o Trunk-Based) estão pensados para a implantação contínua. O Git Flow seria demasiado pesado.
No Trunk-Based Development, como se esconde uma funcionalidade não concluída?
a) Numa branch longa de várias semanas
b) Com um feature flag (bandeira de funcionalidade)
c) Apagando o código todas as noites
d) Não se pode, é preciso acabar tudo de uma vez
✅ Resposta: b) — Os feature flags permitem integrar código inacabado sem o ativar para os utilizadores, evitando branches longas.
Que prefixo de branch se usa para corrigir um bug crítico diretamente em produção?
a) feature/
b) release/
c) hotfix/
d) develop/
✅ Resposta: c) — Uma branch hotfix/ parte de main para corrigir um bug urgente e depois é fundida em main e develop.
Trabalha num repositório cuja main é estável. Pedem-lhe que acrescente uma página « Sobre ». Ponha em prática o GitHub Flow:
main atualizado.apropos.html.# 1. Partir de um main atualizado
git switch main
git pull origin main
# 2. Criar uma branch descritiva
git switch -c feature/page-apropos
# 3. Criar o ficheiro e depois fazer commit
echo "<h1>Sobre</h1>" > apropos.html
git add apropos.html
git commit -m "Adiciona a página Sobre"
# 4. Enviar a branch para o remoto
git push -u origin feature/page-apropos
# 5. Verificar as branches
git branchResultado esperado:
| Etapa | Verificação |
|---|---|
| Branch criada | git branch mostra * feature/page-apropos |
| Commit presente | git log --oneline -1 mostra « Adiciona a página Sobre » |
| Branch enviada | O Git mostra * [new branch] feature/page-apropos -> feature/page-apropos |
| Seguimento configurado | O -u liga a branch local à branch remota |
* feature/page-apropos
mainEtapa seguinte lógica: abrir uma pull request no GitHub para fazer reler e fundir este trabalho — é exatamente o objeto da lição 03.
main, develop, feature/, release/, hotfix/ — cada um com um papel.main + pull requests, perfeito para a web.Agora que sabe organizar as suas branches, siga para a lição 02 — Merge e rebase: como juntar estas branches com limpeza e resolver os conflitos.
Todos os direitos reservados. Qualquer reprodução, difusão, utilização ou adaptação deste curso, no todo ou em parte, é estritamente proibida sem a autorização escrita prévia do Dr. Haythem REHOUMA.
Curso criado por Dr. Haythem REHOUMA — Desenvolvimento e implementação de soluções de dados