Gestion des conflits avec Git
GitIntroduction2BTS – copieLien du PDF
Un conflit Git se produit lorsqu’on fusionne deux branches qui ont modifié la même partie d’un fichier.
Git ne peut pas décider quelle version garder et vous demande d’intervenir.
Raisons d’un conflit
- La même ligne a été modifiée dans deux branches différentes.
- Un fichier a été supprimé dans une branche et modifié dans l’autre.
- Un fichier a été renommé et modifié en parallèle.
Quand un conflit survient, Git stoppe le merge et indique les fichiers concernés.
Comment Git marque un conflit
Git insère des marqueurs de conflit directement dans le fichier :
<<<<<<< HEAD
background-color: #f4f4f4;
=======
background-color: #f8f4f4;
>>>>>>> test2CSS
<<<<<<< HEAD
→ votre version (branche actuelle, ex.main
).=======
sépare les deux versions.>>>>>>> nom_branche
→ la version venant de la branche que vous fusionnez.
Étapes pour résoudre un conflit
- Ouvrir le fichier signalé.
- Choisir la bonne version (ou fusionner les deux manuellement).
- Supprimer les marqueurs
<<<<<<<
,=======
,>>>>>>>
. - Sauvegarder le fichier.
- Informer Git que le conflit est résolu :
git add nom_du_fichier git commit
Bonnes pratiques pour éviter les conflits
- Mettre à jour régulièrement sa branche :
git pull origin main
- Faire des commits petits et logiques (plus simples à relire).
- Nommer clairement les branches par fonctionnalité (
feature/
,fix/
…). - Communiquer dans l’équipe pour éviter deux personnes sur la même zone de code.
- Utiliser rebase avant merge pour rejouer ses commits au-dessus des derniers changements :
git pull --rebase
Gestion des conflits avec GitHub
Quand on travaille avec GitHub, les conflits arrivent souvent lors des Pull Requests quand deux personnes ont modifié la même partie d’un fichier.
Raisons d’un conflit sur GitHub
- Deux développeurs modifient la même ligne sur des branches différentes.
- Un fichier est supprimé sur une branche et modifié sur une autre.
- Renommage d’un fichier pendant qu’il est modifié ailleurs.
Quand tu crées une Pull Request et que GitHub détecte un conflit, il affiche un message :
“This branch has conflicts that must be resolved”.
Résoudre un conflit via GitHub
- Allez sur la Pull Request qui bloque.
- GitHub affiche les fichiers en conflit avec les marqueurs :
<<<<<<< main
background-color: #f4f4f4;
=======
background-color: #f8f4f4;
>>>>>>> ma-branche
<<<<<<< main
→ code actuel sur la branche principale.=======
sépare les deux versions.>>>>>>> ma-branche
→ votre modification.
- Dans l’éditeur de GitHub, choisissez la bonne version (ou fusionnez les deux manuellement).
- Supprimez les marqueurs
<<<<<<<
,=======
,>>>>>>>
. - Validez le fichier en cliquant sur Mark as resolved.
- Terminez en cliquant sur Commit merge ou Merge pull request.
Résoudre un conflit en local puis mettre à jour GitHub
- Depuis ton terminal, récupère les dernières modifications de
main
:git checkout ma-branche git pull origin main
- Git signale les fichiers en conflit (ils apparaissent avec
UU
dansgit status
). - Ouvre les fichiers en conflit et choisis quelle version garder (supprime les marqueurs).
- Ajoute les fichiers corrigés et commit :
git add nom_fichier git commit -m "Résolution de conflit avec main"
- Pousse les changements sur ta branche pour mettre à jour la Pull Request :
git push origin ma-branche
GitHub détecte automatiquement que les conflits ont été résolus et te permettra de finaliser la Pull Request.
Bonnes pratiques sur GitHub
- Synchronise ta branche souvent avec
main
:git pull origin main
- Fais des commits petits et clairs : un commit = une modification logique.
- Crée une branche par fonctionnalité (
feature/
,fix/
…). - Relis toujours ton code via la Pull Request avant de merger.
Résumé rapide pour GitHub
- Conflit = deux personnes ont changé la même ligne.
- GitHub bloque la Pull Request et demande une résolution.
- Résoudre en ligne (éditeur GitHub) ou localement avec
git
. - Une fois corrigé →
git add
→git commit
→git push
pour mettre à jour la PR.
TP — Découverte et gestion des conflits avec GitHub
Objectif
- Comprendre comment fonctionnent les branches, les pull requests et les conflits de fusion.
- Apprendre à résoudre un conflit directement sur GitHub et en local avec Git.
Prérequis
- Un compte GitHub par étudiant.
- Git installé sur les postes (
git --version
pour vérifier). - Un éditeur de code (VS Code, par exemple).
Étape 1 — Création du dépôt commun
- Étudiant A crée un dépôt public sur GitHub (nom :
TP-Conflits-NOM1-NOM2
). - Ajoutez un
README.md
avec :# TP Conflits GitHub
- Dans Settings → Collaborators, Étudiant A invite Étudiant B comme collaborateur.
Étape 2 — Clonage du dépôt
git clone https://github.com/ETUDIANT_A/TP-Conflits-NOM1-NOM2.git
cd TP-Conflits-NOM1-NOM2
Étape 3 — Création d’un fichier partagé
- Étudiant A crée
presentation.md
:# Présentation Bonjour, je suis Étudiant A.
- Commit & push :
git add presentation.md git commit -m "Ajout présentation Étudiant A" git push origin main
- Étudiant B exécute
git pull
pour récupérer ce fichier.
Étape 4 — Création de branches
Étudiant A :
git checkout -b feature-A
echo "Mon plat préféré : Pizza" >> presentation.md
git add presentation.md
git commit -m "Ajout plat préféré A"
git push origin feature-A
Étudiant B :
git checkout -b feature-B
echo "Mon plat préféré : Sushi" >> presentation.md
git add presentation.md
git commit -m "Ajout plat préféré B"
git push origin feature-B
Étape 5 — Pull Request et conflit
- Étudiant A ouvre une Pull Request de
feature-A
versmain
et la merge. - Étudiant B ouvre une Pull Request de
feature-B
versmain
.⚠️ GitHub détecte un conflit car le fichier a été modifié dans les deux branches.
Étape 6 — Résolution du conflit sur GitHub
- GitHub affiche : This branch has conflicts that must be resolved.
- Cliquez sur Resolve conflicts et éditez :
<<<<<<< main
Mon plat préféré : Pizza
=======
Mon plat préféré : Sushi
>>>>>>> feature-B
Par exemple, remplacez par :
Mon plat préféré : Pizza et Sushi
Puis : Mark as resolved → Commit merge et mergez la Pull Request.
Étape 7 — Simulation d’un conflit en local
- Étudiant B modifie localement :
echo "Mon sport préféré : Football" >> presentation.md git commit -am "Ajout sport préféré B" git push origin feature-B
- Étudiant A modifie directement
main
sur GitHub (ex : « Mon sport préféré : Tennis »). - Étudiant B se met à jour :
git pull origin main
Un conflit apparaît :
<<<<<<< HEAD Mon sport préféré : Football ======= Mon sport préféré : Tennis >>>>>>> main
- Corriger le fichier (ex : garder les deux lignes), puis :
git add presentation.md git commit -m "Résolution du conflit local" git push origin feature-B
- La Pull Request se met à jour et peut être mergée.
TP — Collaboration GitHub avec PyCharm
📦 Prérequis
- PyCharm installé (Community ou Professional).
- Git installé sur l’ordinateur (
git --version
pour vérifier). - Un compte GitHub par étudiant.
Étape 1 — Création du dépôt
- Étudiant A crée un dépôt GitHub :
TP-PyCharm-Git
. - Initialisez avec un
README.md
vide ou simple. - Dans Settings → Collaborators, ajoutez Étudiant B.
Étape 2 — Clonage dans PyCharm
- Ouvrir PyCharm → Get from VCS.
- Collez l’URL du dépôt GitHub (HTTPS) → Clone.
- PyCharm ouvre le projet et crée un dossier local.
Étape 3 — Création du code initial
- Étudiant A crée un fichier
main.py
avec :
def dire_bonjour(nom):
print(f"Bonjour {nom} !")
dire_bonjour("A")
- Validez dans PyCharm : Git → Commit → message « Ajout fonction dire_bonjour » → Commit and Push.
- Étudiant B fait Git → Pull pour récupérer.
Étape 4 — Création de branches
Chaque étudiant crée sa propre branche dans PyCharm :
Git → New Branch → feature-A
ou
Git → New Branch → feature-B
Étudiant A modifie :
def dire_bonjour(nom):
print(f"Bonjour {nom} !")
print("Je suis A et j'aime le café ")
Étudiant B modifie :
def dire_bonjour(nom):
print(f"Bonjour {nom} !")
print("Je suis B et j'aime le thé ")
Chacun fait Commit and Push sur sa propre branche.
Étape 5 — Pull Request & Conflit sur GitHub
- Étudiant A ouvre une Pull Request (
feature-A → main
) et la merge sur GitHub. - Étudiant B ouvre une Pull Request (
feature-B → main
) → ⚠️ GitHub détecte un conflit car la fonction a été modifiée par les deux. - Cliquez sur Resolve conflicts sur GitHub :
<<<<<<< main print("Je suis A et j'aime le café ") ======= print("Je suis B et j'aime le thé ") >>>>>>> feature-B
- Fusionnez les deux lignes :
print("Je suis A et j'aime le café ") print("Je suis B et j'aime le thé ")
- Validez sur GitHub (Mark as resolved → Commit merge).
Étape 6 — Simulation d’un conflit local avec PyCharm
- Étudiant A modifie dans
main.py
:
def dire_bonjour(nom):
print(f"Salut {nom} ")
- Il fait Commit and Push sur
main
. - Étudiant B modifie aussi la même ligne (ex :
print(f"Hello {nom}")
) sur sa branche localefeature-B
et fait Commit. - Étudiant B essaie Git → Pull → ⚠️ PyCharm détecte un merge conflict.
- PyCharm ouvre un éditeur spécial avec 3 colonnes :
- Left = votre version
- Right = version distante
- Base = version commune
- Choisissez quelles lignes garder (ou fusionner manuellement).
- Une fois satisfait → Apply, puis Commit Merge et Push.
Ce contenu est réservé aux membres du site. Si vous êtes un utilisateur existant, veuillez vous connecter. Les nouveaux utilisateurs peuvent s'inscrire ci-dessous.