DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesDébuter avec Git : commits, branches et premier repo03 - Résoudre les Conflits de Fusion

Détails

  • 20 minutes
  • Intermédiaire

Objectifs

  • Créer intentionnellement un conflit
  • Comprendre les marqueurs de conflit
  • Résoudre manuellement
  • Committer la résolution
Module Débuter avec Git : commits, branches et premier repo

Exercice 03 : Résoudre les Conflits de Fusion

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Reconnaître quand un conflit se produit
  • ✅ Comprendre les marqueurs de conflit (<<<<<<<, =======, >>>>>>>)
  • ✅ Résoudre les conflits manuellement
  • ✅ Finaliser le merge avec un commit
  • ✅ Stratégies pour éviter les conflits

Durée estimée : 20 minutes

Difficulté : ⭐⭐☆☆☆ (Intermédiaire)

Prérequis :

  • Avoir complété Exercice 02 (connaître les branches et merges)

📖 Contexte

Un conflit de fusion se produit quand :

  • Deux branches modifient la même ligne du même fichier
  • Git ne sait pas quelle version garder

Exemple :

main   : print("Hello")
feature: print("Hi")

Git dit : "Je ne peux pas décider automatiquement. À vous de choisir ! "

C'est une situation très commune en équipe. Faut savoir la gérer.


📋 Énoncé

Vous allez :

  1. Créer deux branches qui modifient le même fichier
  2. Créer intentionnellement un conflit
  3. Déclencher le conflit en faisant un merge
  4. Voir les marqueurs de conflit
  5. Résoudre le conflit manuellement
  6. Finaliser le merge

Résultat attendu :

  • Merge réussi après résolution
  • Fichier final contient les changements consensuels
  • Commit de merge créé

🔧 Matériel Nécessaire

  • Git : déjà installé
  • Repository : celui du Exercice 02 (ou créer nouveau)
  • Éditeur : Notepad, nano, VS Code idéalement (pour visualiser facilement)
  • Terminal
  • Temps : 30 minutes

🧭 Déroulement de l'exercice

Voici les grandes étapes à réaliser dans l'ordre. Chaque étape décrit ce que vous devez accomplir - à vous de trouver la commande. La solution complète est disponible si vous êtes bloqué.

Tâche 1 : Créer un fichier de base partagé

Créez un fichier config.txt avec plusieurs lignes de configuration (clé = valeur), puis committez-le sur main. Ce fichier sera la base commune des deux branches.

Indice : Le fichier doit exister dans git log avant de créer les branches. Assurez-vous d'être sur main et d'avoir un commit propre.

Vérification : git log --oneline doit afficher le commit avec ce fichier.


Tâche 2 : Créer une première branche et modifier une ligne

Créez une branche feature/change-port et modifiez la valeur server_port dans config.txt. Committez ce changement.

Indice : Vous pouvez modifier la ligne avec un éditeur de texte ou avec sed. La valeur exacte importe peu - l'essentiel est que cette ligne soit différente de celle dans main.

Vérification : git diff main depuis cette branche doit montrer votre modification.


Tâche 3 : Créer une deuxième branche depuis main et modifier la MÊME ligne

Retournez sur main, créez une branche feature/change-env et modifiez à nouveau server_port dans config.txt - mais avec une valeur DIFFÉRENTE de la première branche. Committez.

Indice : La clé d'un conflit : les deux branches modifient la même ligne. Si elles touchaient des lignes différentes, Git fusionnerait automatiquement sans conflit.

Vérification : Les deux branches ont maintenant des versions différentes de la même ligne dans config.txt.


Tâche 4 : Merger la première branche (sans conflit)

Retournez sur main et mergez feature/change-port. Ce premier merge doit réussir sans conflit.

Indice : Le premier merge sera propre car main n'a pas touché à config.txt depuis que cette branche a été créée.

Vérification : Git doit afficher un message de succès (pas de "CONFLICT").


Tâche 5 : Déclencher et identifier le conflit

Mergez maintenant feature/change-env. Git doit refuser et signaler un conflit.

Indice : Git marque les zones conflictuelles avec <<<<<<<, ======= et >>>>>>>. Ouvrez le fichier en conflit pour les voir.

Question à se poser : Que représente chaque bloc entre les marqueurs ? Lequel vient de main ? Lequel vient de la branche entrante ?

Vérification : Git doit afficher "CONFLICT" et git status doit montrer le fichier comme "both modified".


Tâche 6 : Résoudre le conflit et finaliser le merge

Ouvrez le fichier conflictuel dans un éditeur. Supprimez les marqueurs de conflit et gardez la version finale que vous souhaitez. Ensuite, finalisez le merge.

Indice : Après avoir modifié et sauvegardé le fichier, le processus reprend comme un commit normal : ajoutez au staging, puis committez. Git proposera un message de merge automatiquement.

Vérification : git log --oneline --graph doit montrer un commit de merge avec deux branches qui se rejoignent. Le fichier ne doit plus contenir <<<<<<<.


� Mini-Projet : Gérer des changements concurrents

Vous allez simuler deux développeurs qui travaillent sur le même fichier et résoudre le conflit qui en résulte.

Scénario : Vous avez un fichier app-config.json contenant des paramètres de l'application. Deux membres de l'équipe modifient chacun une valeur différente - mais sur la même ligne.

Ce que vous devez réaliser :

  1. Sur main, créez app-config.json avec au moins 5 paramètres (ex: version, port, debug, timeout, max_users) - faites un commit
  2. Créez feature/team-settings depuis main, modifiez max_users et timeout - faites un commit
  3. Revenez sur main, créez feature/dev-settings, modifiez max_users à une valeur différente et debug - faites un commit
  4. Mergez feature/team-settings dans main (sans conflit)
  5. Tentez de merger feature/dev-settings - un conflit doit apparaître sur max_users
  6. Résolvez le conflit en choisissant une valeur cohérente
  7. Finalisez le merge

Checkpoints de validation :

  • app-config.json ne contient aucun marqueur de conflit (<<<<<<<, =======, >>>>>>>)
  • git log --oneline --graph montre deux branches qui convergent
  • git status affiche "nothing to commit, working tree clean"
  • Le fichier final contient des valeurs provenant des DEUX branches (pas juste l'une des deux)
  • L'historique compte au moins 4 commits (initial + 2 features + 1 merge)
  • Les deux branches feature ont été supprimées après merge

�📚 Étapes Détaillées

Étape 1 : Préparer le Repository

Objectif : S'assurer qu'on part d'une base commune

Instructions:

  1. Aller dans le repository :
bash
cd ma-premiere-app
  1. Vérifier qu'on est sur main :
bash
git branch

Résultat attendu :

* main
  1. Vérifier les commits récents :
bash
git log --oneline -5

Étape 2 : Créer un Fichier de Configuration

Objectif : Créer un fichier qui sera modifié sur deux branches

Instructions:

  1. Créer un fichier config.txt :
bash
echo "# Configuration de l'application

server_name = localhost
server_port = 8000
debug = true
database = sqlite
" > config.txt
  1. Vérifier le contenu :
bash
cat config.txt
  1. Committer ce fichier :
bash
git add config.txt
git commit -m "Ajouter fichier de configuration"

Résultat attendu :

[main 9f8a3d2] Ajouter fichier de configuration
 1 file changed, 6 insertions(+)
 create mode 100644 config.txt

Étape 3 : Créer Une Première Branche

Objectif : Créer une branche qui modifiera le fichier de config

Instructions:

  1. Créer et basculer vers une branche feature/change-port :
bash
git checkout -b feature/change-port
  1. Modifier le fichier config.txt - Changer le port :
bash
# Ouvrir config.txt avec un éditeur
# Changer "server_port = 8000" en "server_port = 3000"
# 
# Sur Linux/Mac, vous pouvez utiliser sed:
sed -i 's/server_port = 8000/server_port = 3000/' config.txt

# Sur Windows, utiliser notepad:
notepad config.txt
# ... éditer manuellement ...
  1. Vérifier la modification :
bash
cat config.txt

Résultat attendu :

server_port = 3000
  1. Committer le changement :
bash
git add config.txt
git commit -m "Changer le port du serveur à 3000"

Étape 4 : Créer Une Deuxième Branche (à partir de main)

Objectif : Créer une autre branche qui modifiera la même ligne

Instructions:

  1. Revenir à main :
bash
git checkout main
  1. Vérifier que le port est revenu à 8000 :
bash
cat config.txt

Résultat attendu :

server_port = 8000
  1. Créer une nouvelle branche feature/change-debug :
bash
git checkout -b feature/change-debug
  1. Modifier le fichier config - Modifier la même ligne (port) :
bash
# Utiliser sed (Linux/Mac)
sed -i 's/server_port = 8000/server_port = 5000/' config.txt

# Ou éditer manuellement avec notepad/nano
  1. Vérifier :
bash
cat config.txt

Résultat attendu :

server_port = 5000
  1. Committer :
bash
git add config.txt
git commit -m "Changer le port du serveur à 5000"

Étape 5 : Déclencher le Conflit

Objectif : Tenter de merger les deux branches et créer un conflit

Instructions:

  1. Revenir à main :
bash
git checkout main
  1. Vérifier votre branche actuelle :
bash
git branch

Résultat attendu :

  feature/change-debug
  feature/change-port
* main
  1. Merger la première branche (sans conflit) :
bash
git merge feature/change-port

Résultat attendu :

Updating 9f8a3d2..8b7c4e3
Fast-forward
 config.txt | 2 +-
 1 file changed, 1 insertion(+)
  1. Vérifier le contenu (devrait avoir port 3000) :
bash
cat config.txt
  1. Maintenant, merger la deuxième branche (qui créera le conflit) :
bash
git merge feature/change-debug

Résultat attendu :

Auto-merging config.txt
CONFLICT (content): Merge conflict in config.txt
Automatic merge failed; fix conflicts and then commit the result.

🎯 Le conflit est déclenché !


Étape 6 : Examiner le Fichier en Conflit

Objectif : Voir comment Git marque les conflits

Instructions:

  1. Ouvrir le fichier config.txt :
bash
cat config.txt

Résultat attendu :

# Configuration de l'application

server_name = localhost
<<<<<<< HEAD
server_port = 3000
=======
server_port = 5000
>>>>>>> feature/change-debug
debug = true
database = sqlite

Décodage des marqueurs :

  • <<<<<<< HEAD = Début de la version actuelle (main)
  • server_port = 3000 = Version de main
  • ======= = Séparateur
  • server_port = 5000 = Version de la branche mergée (feature/change-debug)
  • >>>>>>> feature/change-debug = Fin de la version à merger
  1. Vérifier le statut Git :
bash
git status

Résultat attendu :

On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to include in what will be committed)
        both modified:   config.txt

Étape 7 : Résoudre le Conflit

Objectif : Choisir manuellement la version correcte

Instructions:

Scénario : Pour l'exemple, disons que le bon port est 8080 (un compromis).

  1. Ouvrir config.txt avec un éditeur :
bash
# Linux/Mac avec nano
nano config.txt

# Ou Windows avec notepad
notepad config.txt

# Ou VS Code
code config.txt
  1. Éditer le fichier pour supprimer les marqueurs de conflit et mettre la bonne valeur :
# Configuration de l'application

server_name = localhost
server_port = 8080
debug = true
database = sqlite

Points importants :

  • Supprimer les trois lignes de marqueurs (<<<<<<<, =======, >>>>>>>)
  • Garder le contenu que vous voulez
  • Possibilités :
  • Garder seulement la version HEAD (8000 → 3000)
  • Garder seulement la version entrante (5000)
  • Combiner les deux ou mettre une valeur nouvelle (8080)
  1. Sauvegarder le fichier

Étape 8 : Ajouter le Fichier Résolu

Objectif : Dire à Git que le conflit est résolu

Instructions:

  1. Ajouter le fichier (ce qui indique qu'il est résolu) :
bash
git add config.txt
  1. Vérifier le statut :
bash
git status

Résultat attendu :

On branch main
All conflicts fixed but you are still merging.
  (use "git commit" to conclude the merge)

Changes to be committed:
  modified:   config.txt

Étape 9 : Finaliser le Merge avec un Commit

Objectif : Créer le commit de merge

Instructions:

  1. Créer le commit de merge :
bash
git commit -m "Résoudre conflit entre feature/change-port et feature/change-debug

- Port final : 8080
- Choix : compromis entre 3000 et 5000"

Résultat attendu :

[main 1f9c3a4] Résoudre conflit entre feature/change-port et feature/change-debug
  1. Vérifier le statut (ne doit plus dire "merging") :
bash
git status

Résultat attendu :

On branch main
nothing to commit, working tree clean

Étape 10 : Vérifier le Résultat Final

Objectif : Confirmer que le merge est complet

Instructions:

  1. Vérifier le fichier final :
bash
cat config.txt

Résultat attendu :

# Configuration de l'application

server_name = localhost
server_port = 8080
debug = true
database = sqlite
  1. Voir l'historique :
bash
git log --oneline -5

Résultat attendu :

1f9c3a4 Résoudre conflit entre feature/change-port et feature/change-debug
8b7c4e3 Changer le port du serveur à 3000
9f8a3d2 Ajouter fichier de configuration
7c3f1e9 Ajouter instructions d'installation
5b2c9d8 Ajouter guide de contribution
  1. Voir le graphe (si possible) :
bash
git log --oneline --graph

✅ Vérification du Résultat

Pour vérifier que vous avez réussi :

bash
# Vérifier qu'il n'y a pas de marqueurs de conflit
grep -i "<<<<<<" config.txt        # Ne doit rien afficher

# Vérifier le port est 8080
grep "server_port" config.txt      # Doit afficher "server_port = 8080"

# Vérifier l'historique
git log --oneline -5               # Doit montrer le commit de merge

Checklist finale :

  • ✅ Conflit créé intentionnellement
  • ✅ Marqueurs de conflit compris et supprimés
  • ✅ Fichier résolu correctement
  • ✅ Merge finalisé avec commit
  • ✅ Pas de traces de conflit dans le fichier final

🎮 Défi Bonus

Défi 1 : Créer un conflit sur plusieurs lignes

bash
# Créer deux branches qui modifient des sections différentes
# Mais de manière à créer des conflits

git checkout main
git checkout -b feature/full-config
# ... modifier plusieurs sections ...

Défi 2 : Annuler un merge en cours

bash
# Si vous faites une erreur lors du merge:
git merge --abort

# Cela annule le merge comme s'il ne s'était pas produit

Défi 3 : Utiliser un outil de merge graphique

bash
# Mérgétool interactif (si configuré)
git mergetool

# Cela ouvre un outil visuel pour résoudre les conflits
# Recommandé : VS Code, meld, ou p4merge

Défi 4 : Comprendre les stratégies de merge

bash
# Voir les branches et leurs bases communes
git merge-base main feature/change-debug

# Simuler le merge sans l'appliquer
git merge --no-commit feature/change-debug
git merge --abort

💡 Points Clés à Retenir

  1. Marqueurs de conflit : <<<<<<<, =======, >>>>>>> marquent les sections en conflit
  2. HEAD toujours en haut : HEAD est le commit actuel (sur main), l'autre branche est en bas
  3. Résolution manuelle : Vous devez décider quelle version garder
  4. Committer la résolution : Le merge n'est pas complet jusqu'au commit
  5. git merge --abort : Annuler si nécessaire

🎯 Prochaines Étapes

  • ✅ Vous savez résoudre les conflits de fusion
  • 🔜 Exercice suivant : Synchroniser avec GitHub
  • 🚀 Index des exercices : Tous les exercices

Excellent ! Les conflits n'ont plus de secret pour vous ! 🎉

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🔧 Matériel Nécessaire
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer un fichier de base partagé
  • Tâche 2 : Créer une première branche et modifier une ligne
  • Tâche 3 : Créer une deuxième branche depuis main et modifier la MÊME ligne
  • Tâche 4 : Merger la première branche (sans conflit)
  • Tâche 5 : Déclencher et identifier le conflit
  • Tâche 6 : Résoudre le conflit et finaliser le merge
  • � Mini-Projet : Gérer des changements concurrents
  • �📚 Étapes Détaillées
  • Étape 1 : Préparer le Repository
  • Étape 2 : Créer un Fichier de Configuration
  • Étape 3 : Créer Une Première Branche
  • Étape 4 : Créer Une Deuxième Branche (à partir de main)
  • Étape 5 : Déclencher le Conflit
  • Étape 6 : Examiner le Fichier en Conflit
  • Étape 7 : Résoudre le Conflit
  • Étape 8 : Ajouter le Fichier Résolu
  • Étape 9 : Finaliser le Merge avec un Commit
  • Étape 10 : Vérifier le Résultat Final
  • ✅ Vérification du Résultat
  • 🎮 Défi Bonus
  • 💡 Points Clés à Retenir
  • 🎯 Prochaines Étapes