Aller au contenu principal

Étude de Cas : Merge et Rebase


Table des matières


  1. Introduction
  2. Scénario de base
  3. Option 1 : Git Merge
  4. Option 2 : Git Rebase
  5. Comparaison visuelle
  6. Quand utiliser quoi ?
  7. Exercice pratique


1 - Introduction



Quand plusieurs personnes travaillent sur un projet, les branches divergent. Pour intégrer les changements, deux options principales existent :

  • Merge : Fusionne les branches en créant un commit de merge
  • Rebase : Réécrit l'historique pour linéariser les commits

💡 C'est l'un des sujets les plus débattus dans la communauté Git !

🔝 Retour à la table des matières



2 - Scénario de base



Situation initiale

Vous travaillez sur une feature branch feature/login pendant que main a évolué :

      A---B---C  feature/login
/
D---E---F---G main
  • D, E : Commits initiaux sur main
  • A, B, C : Vos commits sur feature/login
  • F, G : Nouveaux commits sur main (faits par d'autres)

Le problème

Votre branche feature/login n'a pas les dernières modifications de main. Il faut intégrer ces changements.

🔝 Retour à la table des matières



3 - Option 1 : Git Merge



Comment ça marche

Le merge crée un commit de fusion qui combine les deux branches :

git checkout feature/login
git merge main

Résultat

      A---B---C---M  feature/login
/ /
D---E---F---G--- main

M est le commit de merge qui a deux parents : C et G.

Avantages du Merge

AvantageDescription
✅ Historique préservéOn voit exactement quand les branches ont été fusionnées
✅ SécuritéPas de réécriture d'historique
✅ TraçabilitéFacile de comprendre le flux de travail
✅ RéversibleOn peut annuler un merge

Inconvénients du Merge

InconvénientDescription
❌ Historique chargéBeaucoup de commits de merge
❌ Graphe complexeDifficile à lire avec git log --graph

Commandes Merge

# Se placer sur la branche cible
git checkout feature/login

# Merger main dans feature/login
git merge main

# En cas de conflits, résoudre puis :
git add .
git commit

🔝 Retour à la table des matières



4 - Option 2 : Git Rebase



Comment ça marche

Le rebase déplace vos commits à la pointe de main :

git checkout feature/login
git rebase main

Résultat

              A'--B'--C'  feature/login
/
D---E---F---G main

Les commits A, B, C sont recréés comme A', B', C' avec de nouveaux hashes.

Avantages du Rebase

AvantageDescription
✅ Historique linéaireGraphe propre et facile à lire
✅ Pas de merge commitsHistorique épuré
✅ Facile à suivreL'ordre des commits est logique

Inconvénients du Rebase

InconvénientDescription
❌ Réécrit l'historiqueDangereux si déjà partagé
❌ Conflits multiplesPeut nécessiter de résoudre les conflits plusieurs fois
❌ Hashes modifiésLes commits ont de nouveaux identifiants

Commandes Rebase

# Se placer sur la branche à rebaser
git checkout feature/login

# Rebaser sur main
git rebase main

# En cas de conflits, résoudre puis :
git add .
git rebase --continue

# Pour annuler le rebase
git rebase --abort

🔝 Retour à la table des matières



5 - Comparaison visuelle



Avant (situation initiale)

      A---B---C  feature/login
/
D---E---F---G main

Après Merge

      A---B---C---M  feature/login
/ /
D---E---F---G--- main

Après Rebase

              A'--B'--C'  feature/login
/
D---E---F---G main

Tableau comparatif

AspectMergeRebase
HistoriqueNon-linéaireLinéaire
Commits supplémentairesOui (merge commit)Non
Hashes préservés✅ Oui❌ Non
Sécurité✅ Haute⚠️ Risquée si partagée
Traçabilité✅ ComplètePartielle
LisibilitéMoyenne✅ Excellente

🔝 Retour à la table des matières



6 - Quand utiliser quoi ?



Utilisez MERGE quand :

  • ✅ La branche a été partagée (push sur GitHub)
  • ✅ Vous voulez préserver l'historique exact
  • ✅ Vous travaillez en équipe sur la même branche
  • ✅ Vous intégrez une feature terminée dans main
  • ✅ Vous n'êtes pas sûr

Utilisez REBASE quand :

  • ✅ La branche est locale (jamais partagée)
  • ✅ Vous voulez un historique propre avant un merge
  • ✅ Vous mettez à jour votre branche avec main
  • ✅ Vous nettoyez vos commits avant une PR

Règle d'or

⚠️ NE JAMAIS rebaser une branche publique !

Si d'autres personnes travaillent dessus, utilisez merge.

Workflow recommandé

# 1. Mettre à jour main
git checkout main
git pull

# 2. Rebaser votre feature branch (si locale)
git checkout feature/login
git rebase main

# 3. Une fois terminé, merger dans main
git checkout main
git merge feature/login # Fast-forward possible !

# 4. Pousser
git push origin main

🔝 Retour à la table des matières



7 - Exercice pratique



Mise en place

# Créer un dépôt de test
mkdir test-merge-rebase
cd test-merge-rebase
git init

# Créer des commits sur main
echo "Initial" > file.txt
git add file.txt
git commit -m "Initial commit"

echo "Line 2" >> file.txt
git commit -am "Add line 2"

# Créer une branche feature
git checkout -b feature/test

echo "Feature line" >> file.txt
git commit -am "Add feature line"

# Retourner sur main et ajouter un commit
git checkout main
echo "Main line" >> file.txt
git commit -am "Add main line"

Tester le Merge

git checkout feature/test
git merge main
git log --oneline --graph

Tester le Rebase (refaire la mise en place d'abord)

git checkout feature/test
git rebase main
git log --oneline --graph

Observer la différence

Comparez les deux historiques avec git log --oneline --graph --all.

🔝 Retour à la table des matières