Branches e histórico

7 min

Índice


1 — Por que branches?

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:

  • Isolamento: um trabalho experimental nunca estraga a versão estável.
  • Colaboração: cada um trabalha na sua branch, sem se atrapalhar.
  • Organização: uma branch = uma funcionalidade ou uma correção.
Branch típicaPapel
mainVersão estável, pronta a entregar
feature/...Nova funcionalidade em curso
fix/...Correção de bug

↑ Voltar ao topo


2 — Criar e mudar de branch
bash
# 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 modernoEquivalente antigoEfeito
git switch nomgit checkout nomMudar para uma branch
git switch -c nomgit checkout -b nomCriar e mudar
git branchListar as branches
git branch -d nomApagar uma branch já fundida

git switch é o comando moderno dedicado às branches. git checkout ainda funciona, mas faz demasiadas coisas ao mesmo tempo — prefira switch para as branches.

🔧 Mini-exercício — Escreva o comando que cria a branch feature-login e muda para ela numa só operação.

✅ Ver uma solução
bash
git switch -c feature-login

↑ Voltar ao topo


3 — Fundir uma branch

Fundir (merge) é integrar as alterações de uma branch noutra — tipicamente, trazer a funcionalidade concluída para main.

bash
# 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ãoQuando?Resultado
Fast-forwardmain não se moveu desde a branchmain avança simplesmente
Merge commitmain também evoluiuUm commit de fusão reúne as duas histórias
bash
# Depois de uma fusão bem-sucedida, pode apagar a branch
git branch -d feature-connexion

Regra 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.

✅ Ver uma solução
bash
git switch main
git merge feature-login

↑ Voltar ao topo


4 — Gerir um conflito de fusão

Um 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-connexion

Para resolver:

  1. Abrir o ficheiro, escolher o conteúdo correto (ou combinar os dois).
  2. Apagar os marcadores <<<<<<<, =======, >>>>>>>.
  3. 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.

✅ Ver uma solução

<<<<<<< , ======= e >>>>>>>. Depois de escolher o conteúdo correto, apagam-se, e em seguida faz-se git add e git commit.

↑ Voltar ao topo


5 — Consultar o histórico
bash
# 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
ComandoResponde à pergunta
git logQual é a história do projeto?
git log --oneline --graph --allComo é que as branches se ramificaram?
git show <hash>O que mudou exatamente neste commit?
git blame fichierQuem 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.

✅ Ver uma solução
bash
git log --oneline --graph --all

↑ Voltar ao topo


6 — Quiz — Branches e histórico

Question 1

Para 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

💡 Ver a solução

Resposta: b) — Uma branch é uma linha de desenvolvimento independente: isola o trabalho em curso da branch estável main.


Question 2

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

💡 Ver a solução

Resposta: b)git switch -c nom cria a branch e posiciona-se nela num só comando (equivalente moderno de git checkout -b).


Question 3

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

💡 Ver a solução

Resposta: b) — Posiciona-se na branch de destino (main) e depois funde a branch fonte (feature) nela.


Question 4

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

💡 Ver a solução

Resposta: a) — O Git não pode escolher entre duas modificações da mesma linha: assinala um conflito a resolver à mão.


Question 5

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 .

💡 Ver a solução

Resposta: b)--graph --all desenha a estrutura das branches e das fusões; --oneline torna-a compacta.

↑ Voltar ao topo


7 — Prática — Uma funcionalidade na sua branch

Instrução

Num repositório existente, crie uma branch, faça nela um commit, depois funda-a em main e consulte o grafo.


Correção — Sequência de comandos esperada

bash
# 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 --all

Resultado 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.

↑ Voltar ao topo


8 — Síntese

Pontos a reter

  1. Uma branch = uma linha de desenvolvimento isolada; main permanece estável.
  2. git switch -c nom cria e muda para uma branch.
  3. Fundir: colocar-se no destino (main), depois git merge source.
  4. Um conflito ocorre nas mesmas linhas modificadas dos dois lados; resolve-se à mão.
  5. git log --oneline --graph --all visualiza a história e as branches.

A continuação

Lição 08 — Repositório remoto: partilhar o seu trabalho em linha e colaborar via um servidor Git (GitHub).

↑ Voltar ao topo


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