Pular para o conteúdo
Jogos Digitais
Nesta página
  1. Objetivos de aprendizagem
  2. Pré-requisitos
  3. Materiais
  4. Conceitos
  5. Exemplos
  6. Tutorial passo a passo
  7. Imagens
  8. Indicação da interface
  9. O código completo
  10. Explicação do código
  11. Resultado esperado
  12. Problemas comuns
  13. Exercício guiado
  14. Desafio individual
  15. Desafio avançado (opcional)
  16. Critérios de avaliação
  17. Checklist de conclusão
  18. Extensão

Módulo 10 · Aula 10.4 · Git: ramos, juntar e resolver conflito

Carga horáriaDificuldadeFerramentaCompetências
8 h/a⭐⭐⭐Git (linha de comando)C7

Objetivos de aprendizagem

  1. Criar um ramo para testar uma ideia sem estragar a versão principal.
  2. Trocar de ramo e juntar um ramo no principal.
  3. Resolver um conflito quando duas pessoas mudaram a mesma linha.
  4. Combinar regras de trabalho em equipe com ramos.

Pré-requisitos

Aula 10.3.

Materiais

Git; repositório do Projeto 6 (ou uma cópia do Chave da Porteira com o primeiro commit feito).

Conceitos

Ramo (branch). Um caminho paralelo do histórico. O principal se chama main. Para testar "e se o labirinto fosse de noite?", cria-se um ramo fase-noturna, faz-se os commits lá, e o main continua intacto. Gostou? Junta. Não gostou? Apaga o ramo.

Juntar (merge). Trazer os commits de um ramo para outro. Quando só um dos lados mudou, o Git só "anda para a frente" (Fast-forward). Quando os dois mudaram em lugares diferentes, ele junta sozinho. Quando os dois mudaram a mesma linha, ele não sabe qual escolher: é um conflito, e uma pessoa decide.

Marcas do conflito. O Git escreve as duas versões no arquivo, entre marcas:

<<<<<<< HEAD
(a versão do ramo em que você está)
=======
(a versão do outro ramo)
>>>>>>> nome-do-outro-ramo

Resolver é apagar as marcas e deixar o texto certo, depois git add e git commit.

Regras de equipe (para o Módulo 11). Cada pessoa trabalha no seu ramo; o main sempre roda; antes de juntar, a dupla testa; mensagens claras. Combinar quem mexe em qual cena evita conflito em arquivos .tscn, que são mais difíceis de juntar à mão.

Exemplos

Saídas reais, numa cópia de teste do Chave da Porteira.

Ramo e junção simples:

$ git switch -c fase-noturna
Switched to a new branch 'fase-noturna'
$ git switch main
Switched to branch 'main'
$ git merge fase-noturna
Updating b1ccd75..71fdcbd
Fast-forward
 cenas/labirinto.tscn | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git log --oneline --graph
* 71fdcbd Sol fraco: labirinto de noite
* b1ccd75 Jogador mais rápido
* 5ae1753 Labirinto com chave e porteira
$ git branch
  fase-noturna
* main

(Entre git switch -c e git switch main, no ramo novo, a energia do sol foi mudada de 0,9 para 0,3 e foi feito o commit "Sol fraco: labirinto de noite".)

Conflito: no ramo paredes-altas a altura virou 3,5 m; no main, 2 m. A mesma linha.

$ git merge paredes-altas
Auto-merging scripts/labirinto.gd
CONFLICT (content): Merge conflict in scripts/labirinto.gd
Automatic merge failed; fix conflicts and then commit the result.
$ git status --short
UU scripts/labirinto.gd

Trecho do arquivo com as marcas (números das linhas à esquerda):

8:<<<<<<< HEAD
9-const ALTURA := 2.0   # altura das paredes, em metros
10-=======
11-const ALTURA := 3.5   # altura das paredes, em metros
12->>>>>>> paredes-altas
13-const MAPA := [

Depois de apagar as marcas e a versão de 3,5 m:

$ git commit -m "Junta os ramos: fica a parede de 2 m"
[main c397b2b] Junta os ramos: fica a parede de 2 m
$ git log --oneline --graph
*   c397b2b Junta os ramos: fica a parede de 2 m
|\  
| * 0fb55b9 Paredes de 3,5 m
* | 7d8e241 Paredes de 2 m
|/  
* 71fdcbd Sol fraco: labirinto de noite
* b1ccd75 Jogador mais rápido
* 5ae1753 Labirinto com chave e porteira

O desenho com |, / e \ mostra os dois caminhos se separando e se juntando de novo.

Tutorial passo a passo

Parte A. Ramo de experimento (100 min)

  1. No repositório do Projeto 6: git switch -c fase-noturna.
  2. Deixe o labirinto de noite (Aula 9.7), rode e faça o commit.
  3. git switch main e rode o jogo: está de dia de novo? Abra o Godot e confira.
  4. git merge fase-noturna. Rode: agora o main tem a noite.
  5. git log --oneline --graph.

Parte B. Fabricar um conflito, em dupla (120 min)

  1. Crie o ramo paredes-altas, mude ALTURA para 3.5 e faça o commit.
  2. Volte ao main, mude ALTURA para 2.0 e faça o commit.
  3. git merge paredes-altas. Leia a mensagem CONFLICT.
  4. Abra scripts/labirinto.gd no Godot ou num editor de texto, ache as marcas, decida com a dupla, apague as marcas e salve.
  5. git add scripts/labirinto.gd e git commit -m "...". Rode o jogo para conferir.

Parte C. Combinar a equipe (60 min)

  1. Em grupo de quatro, escrevam o "acordo do repositório" para o Módulo 11: nomes dos ramos, quem mexe em qual cena, quando juntar, quem testa.

Imagens

Não há capturas: as saídas reais estão nos Exemplos.

Indicação da interface

ComandoO que faz
git switch -c nomecria o ramo e entra nele
git switch nometroca de ramo
git branchlista os ramos; o * marca onde você está
git merge nometraz o ramo nome para o ramo atual
git log --oneline --graphhistórico com o desenho dos ramos
git branch -d nomeapaga um ramo que já foi juntado

O código completo

Não há código novo. A mudança da Parte A é uma linha em cenas/labirinto.tscn (light_energy = 0.9 para 0.3).

Explicação do código

Uma cena .tscn também é texto: por isso o Git consegue mostrar e juntar mudanças nela. Mas cenas têm muitos números (posições, cores) e conflitos nelas são difíceis de entender. A regra prática é uma pessoa por cena de cada vez.

Resultado esperado

Ramo de experimento juntado, um conflito resolvido em dupla e o acordo do repositório escrito.

Problemas comuns

SintomaCausaSolução
git switch recusa trocar de ramohá mudança sem commitfazer o commit (ou git restore) antes
o Godot mostra o projeto "velho" depois de trocar de ramoo editor estava abertofechar e abrir o projeto de novo depois de trocar
o jogo não abre depois do mergesobraram marcas <<<<<<< no arquivoprocurar e apagar todas as marcas
conflito numa cena .tscnduas pessoas mexeram na mesma cenaescolher uma versão inteira e refazer a outra mudança à mão

Exercício guiado

Por que o primeiro merge disse Fast-forward e o segundo deu conflito? (Resposta: no primeiro, só o ramo fase-noturna tinha mudado; o main só andou para a frente. No segundo, os dois ramos mudaram a mesma linha.)

Desafio individual

Faça um ramo, mude algo de que você não gostou e apague o ramo sem juntar (git branch -D nome, com D maiúsculo para apagar sem juntar).

Desafio avançado (opcional)

Provoque um conflito em dois lugares do mesmo arquivo e resolva escolhendo uma versão em cada lugar.

Critérios de avaliação

  • Usa ramo para experimento.
  • Resolve conflito e o jogo continua rodando.
  • Acordo do repositório escrito.

Checklist de conclusão

Extensão

Desenhe no caderno o histórico do seu projeto, com bolinhas para os commits e linhas para os ramos.