| # | Secção |
|---|---|
| 1 | Por que branches? |
| 2 | Criar e mudar de branch |
| 3 | Fundir uma branch |
| 4 | Gerir um conflito de fusão |
| 5 | Consultar o histórico |
| 6 | Quiz — Branches e histórico |
| 7 | Prática — Uma funcionalidade na sua branch |
| 8 | Síntese |
Uma branch é uma linha de desenvolvimento independente. Permite-lhe trabalhar numa nova funcionalidade sem tocar na versão principal (main), que permanece estável.
Analogia: um documento partilhado. Em vez de editar diretamente a versão oficial (risco de estragar tudo), trabalha numa cópia de trabalho (a branch). Quando estiver satisfeito, funde as suas alterações no original.
Por que isto é essencial:
| Branch típica | Papel |
|---|---|
main | Versão estável, pronta a entregar |
feature/... | Nova funcionalidade em curso |
fix/... | Correção de bug |
# Listar as branches (a atual está marcada com um *)
git branch
# Criar uma branch
git branch feature-connexion
# Mudar de branch
git switch feature-connexion
# Criar E mudar num só comando (recomendado)
git switch -c feature-connexion| Comando moderno | Equivalente antigo | Efeito |
|---|---|---|
git switch nom | git checkout nom | Mudar para uma branch |
git switch -c nom | git checkout -b nom | Criar e mudar |
git branch | — | Listar as branches |
git branch -d nom | — | Apagar uma branch já fundida |
git switché o comando moderno dedicado às branches.git checkoutainda funciona, mas faz demasiadas coisas ao mesmo tempo — prefiraswitchpara as branches.
🔧 Mini-exercício — Escreva o comando que cria a branch feature-login e muda para ela numa só operação.
git switch -c feature-loginFundir (merge) é integrar as alterações de uma branch noutra — tipicamente, trazer a funcionalidade concluída para main.
# 1. Colocar-se na branch que vai RECEBER as alterações
git switch main
# 2. Fundir a branch de funcionalidade nela
git merge feature-connexion| Tipo de fusão | Quando? | Resultado |
|---|---|---|
| Fast-forward | main não se moveu desde a branch | main avança simplesmente |
| Merge commit | main também evoluiu | Um commit de fusão reúne as duas histórias |
# Depois de uma fusão bem-sucedida, pode apagar a branch
git branch -d feature-connexionRegra simples: coloca-se na branch de destino (
main) e depois funde a branch fonte nela. « Estou em main, aspiro a feature ».
🔧 Mini-exercício — Está em feature-login e o trabalho está concluído. Escreva os dois comandos para fundir esta branch em main.
git switch main
git merge feature-loginUm conflito ocorre quando duas branches modificaram a mesma linha do mesmo ficheiro. O Git não pode escolher por si: pede-lhe que decida.
O Git insere marcadores no ficheiro em conflito:
<<<<<<< HEAD
texto da branch atual (main)
=======
texto da branch fundida (feature)
>>>>>>> feature-connexionPara resolver:
<<<<<<<, =======, >>>>>>>.git add fichier e depois git commit para finalizar a fusão.Um conflito não é um erro grave: é o Git a protegê-lo, recusando-se a adivinhar. Mantenha a calma, leia as duas versões, fique com a boa.
🔧 Mini-exercício — Cite os três marcadores que o Git insere num ficheiro em conflito e que é preciso apagar depois da resolução.
<<<<<<< , ======= e >>>>>>>. Depois de escolher o conteúdo correto, apagam-se, e em seguida faz-se git add e git commit.
# Histórico completo
git log
# Versão compacta (uma linha por commit)
git log --oneline
# Com o grafo das branches e fusões
git log --oneline --graph --all
# Ver as modificações de um commit
git show <hash>
# Ver quem modificou cada linha de um ficheiro
git blame fichier.txt| Comando | Responde à pergunta |
|---|---|
git log | Qual é a história do projeto? |
git log --oneline --graph --all | Como é que as branches se ramificaram? |
git show <hash> | O que mudou exatamente neste commit? |
git blame fichier | Quem escreveu esta linha, e quando? |
O histórico Git é uma máquina do tempo. Bem usado (com boas mensagens de commit), permite compreender por que o código está no estado atual.
🔧 Mini-exercício — Escreva o comando que mostra o histórico de forma compacta, com o grafo das branches e todas as branches.
git log --oneline --graph --allPara que serve uma branch?
a) Para apagar o histórico
b) Para desenvolver de forma isolada sem tocar na versão principal
c) Para se ligar ao GitHub
d) Para compilar o código
✅ Resposta: b) — Uma branch é uma linha de desenvolvimento independente: isola o trabalho em curso da branch estável main.
Qual o comando que cria uma branch E muda para ela?
a) git branch nom
b) git switch -c nom
c) git merge nom
d) git log nom
✅ Resposta: b) — git switch -c nom cria a branch e posiciona-se nela num só comando (equivalente moderno de git checkout -b).
Para fundir feature em main, primeiro devo…
a) Colocar-me em feature e depois fazer git merge main
b) Colocar-me em main e depois fazer git merge feature
c) Apagar main
d) Fazer git init
✅ Resposta: b) — Posiciona-se na branch de destino (main) e depois funde a branch fonte (feature) nela.
Quando ocorre um conflito de fusão?
a) Quando duas branches modificam a mesma linha do mesmo ficheiro
b) Em cada fusão, sistematicamente
c) Quando se cria uma branch
d) Quando se instala o Git
✅ Resposta: a) — O Git não pode escolher entre duas modificações da mesma linha: assinala um conflito a resolver à mão.
Qual o comando que mostra o histórico com o grafo das branches?
a) git status
b) git log --oneline --graph --all
c) git branch -d
d) git add .
✅ Resposta: b) — --graph --all desenha a estrutura das branches e das fusões; --oneline torna-a compacta.
Num repositório existente, crie uma branch, faça nela um commit, depois funda-a em main e consulte o grafo.
# 1. Partir de main atualizado
git switch main
# 2. Criar e mudar para uma branch de funcionalidade
git switch -c feature-titre
# 3. Trabalhar e fazer commit na branch
echo "## Nova secção" >> README.md
git add README.md
git commit -m "Adiciona uma nova secção ao README"
# 4. Voltar a main e fundir
git switch main
git merge feature-titre
# 5. Limpar a branch fundida
git branch -d feature-titre
# 6. Visualizar o histórico
git log --oneline --graph --allResultado esperado: o commit da branch aparece no histórico de main, e git branch já não lista feature-titre.
Este ciclo — criar uma branch, trabalhar, fundir, apagar — é o fluxo de trabalho diário de um programador. Vai repeti-lo centenas de vezes.
main permanece estável.git switch -c nom cria e muda para uma branch.main), depois git merge source.git log --oneline --graph --all visualiza a história e as branches.Lição 08 — Repositório remoto: partilhar o seu trabalho em linha e colaborar via um servidor Git (GitHub).
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