Trabalho Prático Nº1: Diferença entre git merge e git rebase

3 min

Objetivos pedagógicos:

  • Compreender as diferenças fundamentais entre git merge e git rebase.
  • Observar os efeitos dos dois comandos no histórico Git.
  • Documentar as manipulações com capturas de ecrã e explicações claras.

Objetivos do TP

No fim deste TP, será capaz de:

  1. Usar git merge e git rebase para integrar modificações de branches.
  2. Analisar as diferenças entre os dois comandos na estrutura do histórico.
  3. Identificar os casos de utilização ideais para merge e rebase.

Instruções e etapas detalhadas

Preparação

  1. Crie uma pasta de trabalho para este TP:

    • No terminal, digite os seguintes comandos para preparar o ambiente:
      bash
      mkdir git-evaluation-1
      cd git-evaluation-1
      git init
  2. Captura de ecrã: tire uma captura de ecrã a mostrar a inicialização do repositório (git init).


Etapa 1: inicialização do repositório e criação da branch principal

  1. Criação do ficheiro inicial
    Crie um ficheiro chamado fichier1.txt (ficheiro original) e acrescente um commit de base na branch principal main:

    bash
    echo "Contenu initial dans fichier1" > fichier1.txt
    git add fichier1.txt
    git commit -m "Initialisation du projet avec fichier1.txt"
  2. Renomeie a branch principal para main (se necessário):

    bash
    git branch -M main
  3. Captura de ecrã: mostre a adição do ficheiro e o primeiro commit.


Etapa 2: criação das branches para o rebase e o merge

  1. Crie as branches branche1 e branche2 a partir de main:

    • Crie branche1:
      bash
      git checkout -b branche1
    • Volte a main e crie branche2:
      bash
      git checkout main
      git checkout -b branche2
  2. Criação das branches de trabalho:

    • Crie branche-rebase a partir de branche1:
      bash
      git checkout branche1
      git checkout -b branche-rebase
    • Crie branche-merge a partir de branche2:
      bash
      git checkout branche2
      git checkout -b branche-merge
  3. Captura de ecrã: mostre a criação das branches com o comando git branch.


Etapa 3: adição de commits idênticos em branche-rebase e branche-merge

Nota: vamos usar ficheiros diferentes (fichier-2-rebase.txt e fichier-2-merge.txt) e efetuar as mesmas modificações para poder comparar os efeitos de merge e rebase.

  1. Trabalho em branche-rebase:

    • Primeiro commit:

      bash
      git checkout branche-rebase
      echo "Modification 1 dans branche-rebase" > fichier-2-rebase.txt
      git add fichier-2-rebase.txt
      git commit -m "Ajout de fichier-2-rebase.txt avec modification 1"
    • Segundo commit:

      bash
      echo "Modification 2 dans branche-rebase" >> fichier-2-rebase.txt
      git add fichier-2-rebase.txt
      git commit -m "Ajout de modification 2 dans fichier-2-rebase.txt"
    • Terceiro commit:

      bash
      echo "Modification 3 dans branche-rebase" >> fichier-2-rebase.txt
      git add fichier-2-rebase.txt
      git commit -m "Ajout de modification 3 dans fichier-2-rebase.txt"
  2. Trabalho em branche-merge:

    • Primeiro commit:

      bash
      git checkout branche-merge
      echo "Modification 1 dans branche-merge" > fichier-2-merge.txt
      git add fichier-2-merge.txt
      git commit -m "Ajout de fichier-2-merge.txt avec modification 1"
    • Segundo commit:

      bash
      echo "Modification 2 dans branche-merge" >> fichier-2-merge.txt
      git add fichier-2-merge.txt
      git commit -m "Ajout de modification 2 dans fichier-2-merge.txt"
    • Terceiro commit:

      bash
      echo "Modification 3 dans branche-merge" >> fichier-2-merge.txt
      git add fichier-2-merge.txt
      git commit -m "Ajout de modification 3 dans fichier-2-merge.txt"
  3. Captura de ecrã: mostre os commits realizados em cada branch com git log.


Etapa 4: integração das branches com merge e rebase

  1. Rebase de branche-rebase em branche1:

    • Mude para branche1:

      bash
      git checkout branche1
    • Rebase branche-rebase em branche1:

      bash
      git rebase branche-rebase
    • Captura de ecrã: use git log --oneline --graph --all para mostrar o histórico linear criado pelo rebase.

  2. Merge de branche-merge em branche2:

    • Mude para branche2:

      bash
      git checkout branche2
    • Funda branche-merge em branche2:

      bash
      git merge branche-merge -m "Fusion de branche-merge dans branche2"
    • Captura de ecrã: use git log --oneline --graph --all para mostrar o histórico com o commit de fusão.


Etapa 5: comparação final e perguntas de reflexão

Perguntas de reflexão

  1. Comparar os históricos:

    • O que observa na diferença entre o histórico de branche1 (com rebase) e o de branche2 (com merge)?
    • Tire uma captura de ecrã de cada histórico e explique as diferenças observadas.
  2. Argumentos para cada método:

    • Em que casos seria preferível usar rebase para integrar modificações?
    • Em que casos o merge é mais vantajoso?
  3. Cenários de aplicação:

    • Imagine um projeto em equipa. Explique um caso concreto em que merge poderia causar conflitos no histórico, e como rebase poderia resolver esse problema.
    • Inversamente, descreva um caso em que o uso excessivo de rebase poderia dificultar o acompanhamento num projeto colaborativo.

Resumo e submissão

Para submeter este TP:

  1. Compile as suas respostas e capturas de ecrã num documento (PDF ou Word).
  2. Responda às perguntas de reflexão no fundo do documento.
  3. Submeta o ficheiro na plataforma do curso.