Aller au contenu principal

Stratégies de merge & Résolution de conflits

Module 02 60 min

Objectifs de la section​

  • Comprendre les différentes stratégies de merge
  • Effectuer des merges fast-forward et 3-way
  • Résoudre les conflits de merge avec confiance
  • Utiliser les outils de merge pour les conflits complexes

Les types de merge​

Merge Fast-Forward​

Quand la branche cible n'a pas évolué depuis la création de la branche :

# Fast-forward merge (par défaut quand possible)
git switch main
git merge feature/login

# Forcer un merge commit même avec fast-forward possible
git merge --no-ff feature/login

# Afficher un résumé du merge
git merge --stat feature/login

Merge 3-Way (True Merge)​

Quand les deux branches ont divergé :

# Git crée automatiquement un commit de merge
git merge feature/login
# → Ouvre l'éditeur pour le message du commit de merge

Squash Merge​

Combine tous les commits de la branche en un seul :

# Squash : condenser tous les commits en un seul
git merge --squash feature/login
git commit -m "feat(auth): ajout système de connexion complet"

Résoudre les conflits de merge​

Un conflit se produit quand les deux branches ont modifié le même endroit dans un fichier.

Comment Git marque les conflits​

<<<<<<< HEAD
def calculer(a, b):
return a + b
=======
def calculer(x, y):
"""Calculer la somme de deux nombres."""
return x + y
>>>>>>> feature/refactor
  • <<<<<<< HEAD : Votre version (branche actuelle)
  • ======= : Séparateur
  • >>>>>>> feature/refactor : Version entrante (branche fusionnée)

Étapes pour résoudre un conflit​

# 1. Voir quels fichiers sont en conflit
git status
# both modified: src/utils.py

# 2. Ouvrir le(s) fichier(s) en conflit et choisir la bonne version
# (modifiez manuellement le fichier pour garder ce que vous voulez)

# 3. Après avoir corrigé le fichier, le marquer comme résolu
git add src/utils.py

# 4. Continuer le merge
git merge --continue
# Ou simplement commiter
git commit

# Annuler le merge si vous êtes bloqué
git merge --abort

Utiliser un outil de merge (mergetool)​

# Ouvrir l'outil de merge configuré
git mergetool

# Configurer VS Code comme outil de merge
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'

Stratégies de merge avancées​

--no-ff : Toujours créer un commit de merge​

# Recommandé pour garder une trace claire des intégrations de fonctionnalités
git merge --no-ff feature/login

Fusionner seulement si pas de conflits​

# Abandonner si des conflits se produisent
git merge --no-commit --no-ff feature/login
# Inspecter le résultat avant de commiter
git diff --cached
git commit

Bonnes pratiques pour les merges​

Règles d'or
  1. Toujours mettre à jour votre branche avant de merger (git pull origin main)
  2. Résoudre les conflits localement avant de pousser
  3. Utiliser --no-ff pour les fonctionnalités importantes (conserve l'historique)
  4. Tester après le merge avant de pousser
  5. Supprimer la branche après le merge réussi
# Workflow complet recommandé
git switch main
git pull origin main # Mettre à jour main
git switch feature/login
git merge main # Intégrer les derniers changements de main
# Résoudre les éventuels conflits...
git switch main
git merge --no-ff feature/login # Merger la fonctionnalité
git push origin main
git branch -d feature/login # Nettoyer

Résumé des commandes clés​

CommandeDescription
git merge <branche>Fusionner une branche dans la branche actuelle
git merge --no-ff <branche>Fusionner avec commit de merge
git merge --squash <branche>Squash tous les commits
git merge --abortAnnuler un merge en cours
git merge --continueContinuer après résolution
git statusVoir les fichiers en conflit
git mergetoolOuvrir l'outil de merge

Prochaines étapes​