Seb-Info

Cours 2/3 : Git : Gestion des conflits

Cours 2/3 : Git : Gestion des conflits

Gestion des conflits avec Git

GitIntroduction2BTS – copie

Lien 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

  1. Ouvrir le fichier signalé.
  2. Choisir la bonne version (ou fusionner les deux manuellement).
  3. Supprimer les marqueurs <<<<<<<, =======, >>>>>>>.
  4. Sauvegarder le fichier.
  5. 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

  1. Allez sur la Pull Request qui bloque.
  2. 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.
  1. Dans l’éditeur de GitHub, choisissez la bonne version (ou fusionnez les deux manuellement).
  2. Supprimez les marqueurs <<<<<<<, =======, >>>>>>>.
  3. Validez le fichier en cliquant sur Mark as resolved.
  4. Terminez en cliquant sur Commit merge ou Merge pull request.

Résoudre un conflit en local puis mettre à jour GitHub

  1. Depuis ton terminal, récupère les dernières modifications de main :
    git checkout ma-branche
    git pull origin main
  2. Git signale les fichiers en conflit (ils apparaissent avec UU dans git status).
  3. Ouvre les fichiers en conflit et choisis quelle version garder (supprime les marqueurs).
  4. Ajoute les fichiers corrigés et commit :
    git add nom_fichier
    git commit -m "Résolution de conflit avec main"
  5. 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 addgit commitgit 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

  1. Étudiant A crée un dépôt public sur GitHub (nom : TP-Conflits-NOM1-NOM2).
  2. Ajoutez un README.md avec :
    # TP Conflits GitHub
  3. 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é

  1. Étudiant A crée presentation.md :
    # Présentation
    Bonjour, je suis Étudiant A.
  2. Commit & push :
    git add presentation.md
    git commit -m "Ajout présentation Étudiant A"
    git push origin main
  3. É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

  1. Étudiant A ouvre une Pull Request de feature-A vers main et la merge.
  2. Étudiant B ouvre une Pull Request de feature-B vers main.⚠️ GitHub détecte un conflit car le fichier a été modifié dans les deux branches.

Étape 6 — Résolution du conflit sur GitHub

  1. GitHub affiche : This branch has conflicts that must be resolved.
  2. 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

  1. É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
  2. Étudiant A modifie directement main sur GitHub (ex : « Mon sport préféré : Tennis »).
  3. É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
  4. 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
  5. 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

  1. Étudiant A crée un dépôt GitHub : TP-PyCharm-Git.
  2. Initialisez avec un README.md vide ou simple.
  3. Dans Settings → Collaborators, ajoutez Étudiant B.

Étape 2 — Clonage dans PyCharm

  1. Ouvrir PyCharm → Get from VCS.
  2. Collez l’URL du dépôt GitHub (HTTPS) → Clone.
  3. PyCharm ouvre le projet et crée un dossier local.

Étape 3 — Création du code initial

  1. Étudiant A crée un fichier main.py avec :
def dire_bonjour(nom):
    print(f"Bonjour {nom} !")

dire_bonjour("A")
  1. Validez dans PyCharm : Git → Commit → message « Ajout fonction dire_bonjour »Commit and Push.
  2. É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

  1. Étudiant A ouvre une Pull Request (feature-A → main) et la merge sur GitHub.
  2. Étudiant B ouvre une Pull Request (feature-B → main) → ⚠️ GitHub détecte un conflit car la fonction a été modifiée par les deux.
  3. 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
  4. Fusionnez les deux lignes :
    print("Je suis A et j'aime le café ")
    print("Je suis B et j'aime le thé ")
  5. Validez sur GitHub (Mark as resolved → Commit merge).

Étape 6 — Simulation d’un conflit local avec PyCharm

  1. Étudiant A modifie dans main.py :
def dire_bonjour(nom):
    print(f"Salut {nom} ")
  1. Il fait Commit and Push sur main.
  2. Étudiant B modifie aussi la même ligne (ex : print(f"Hello {nom}")) sur sa branche locale feature-B et fait Commit.
  3. Étudiant B essaie Git → Pull → ⚠️ PyCharm détecte un merge conflict.
  4. PyCharm ouvre un éditeur spécial avec 3 colonnes :
    • Left = votre version
    • Right = version distante
    • Base = version commune
  5. Choisissez quelles lignes garder (ou fusionner manuellement).
  6. 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.

Connexion pour les utilisateurs enregistrés
   
Nouvel utilisateur ?
*Champ requis
Powered by WP-Members