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