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
- Toujours mettre à jour votre branche avant de merger (
git pull origin main) - Résoudre les conflits localement avant de pousser
- Utiliser
--no-ffpour les fonctionnalités importantes (conserve l'historique) - Tester après le merge avant de pousser
- 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
| Commande | Description |
|---|---|
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 --abort | Annuler un merge en cours |
git merge --continue | Continuer après résolution |
git status | Voir les fichiers en conflit |
git mergetool | Ouvrir l'outil de merge |