Workflow Git : Faire le pull et éviter les conflits

Ouverture du projet
git pull
Modifier fichiers
git add
git commit
git push (conflits détectés)
git pull (+ résoudre conflit)
git push (succès)
1

Ouverture d'un projet existant

À cette étape :

  • Vous ouvrez un projet existant déjà cloné sur votre ordinateur, qui contient déjà des fichiers
  • Le dépôt local est synchronisé avec le dépôt distant
  • Tous les fichiers sont dans un état propre (committed)
  • Aucun fichier n'a été modifié depuis le dernier commit

Arborescence du projet

mon-site-web/
index.html (non modifié)
about.html (non modifié)
services.html (non modifié)
contact.html (non modifié)
css/
style.css (non modifié)
img/
logo.png (non modifié)
banner.jpg (non modifié)

État de Git

Fichiers modifiés

Aucun

Zone de transit (Staging)

Vide

Dépôt local

Dernier commit : structure initiale du site

Synchronisé avec origin/main

2

Faire git pull

Ce qui se passe :

Vous exécutez git pull avant de commencer à travailler !

  • Vous récupérez les dernières modifications du dépôt distant
  • Votre dépôt local est maintenant synchronisé avec le dépôt distant
  • Vous êtes au courant des modifications récentes de vos collègues
  • Cela évite les conflits lors du push futur

État des dépôts après git pull

Dépôt local (votre ordinateur)

Dernier commit : v1.1 (mis à jour)

Dépôt distant (serveur)

Dernier commit : v1.1

Votre situation

✅ Parfait : Votre dépôt local est synchronisé !

Leçon : Commencer chaque session par git pull est une bonne pratique !

3

Modifier des fichiers (après avoir récupéré les changements distants)

À cette étape :

Vous modifiez le fichier index.html, en sachant que votre collègue a déjà apporté des modifications (que vous avez récupérées).

État actuel du fichier

Après git pull, le fichier index.html contient :

Contenu actuel :

<h1>Welcome to our awesome website</h1>

Votre modification :

<h1>Bienvenue sur notre site web incroyable</h1>
mon-site-web/
index.html (M)
about.html (non modifié)
services.html (non modifié)
contact.html (non modifié)
css/
style.css (non modifié)
img/
logo.png (non modifié)
banner.jpg (non modifié)

État de Git

Fichiers modifiés (M)
index.html
Zone de transit (Staging)

Vide

Dépôt local

Dernier commit local : v1.1 (synchronisé)

4

Ajouter les modifications à la zone de transit (git add)

À cette étape :

  • Vous avez modifié un fichier et êtes prêt à le préparer pour le commit
  • Vous dites à Git : "Ce fichier modifié est prêt à être sauvegardé"
  • Le fichier passe de Modified (M) à Added (A)
  • Seuls les fichiers dans la zone de transit feront partie du prochain commit

Commande à exécuter

git add .
mon-site-web/
index.html (A)
about.html (non modifié)
services.html (non modifié)
contact.html (non modifié)
css/
style.css (non modifié)
img/
logo.png (non modifié)
banner.jpg (non modifié)

État de Git

Fichiers modifiés (M)

Aucun

Zone de transit (Staging)
index.html

Seuls les fichiers ajoutés à la zone de transit feront partie du prochain commit.

5

Créer un commit avec les modifications

À cette étape:

  • Vous avez ajouté vos modifications à la zone de transit
  • Vous exécutez la commande git commit -m "message" pour créer un commit
  • Le commit enregistre un instantané des fichiers dans la zone de transit
  • Le message décrit les changements effectués dans ce commit
  • Vos modifications sont maintenant sauvegardées localement dans l'historique des commits
  • Le tout est prêt pour un PUSH (ou presque...)

Commande à exécuter

git commit -m "Modification de la page d'accueil"

Aperçu des changements

--- a/index.html
+++ b/index.html
@@ -1,6 +1,6 @@
-<h1>Welcome to my website</h1>
+<h1>Bienvenue sur mon site web</h1>
 <p>Ceci est notre site web.</p>
 </body>
 </html>

Arborescence du projet

mon-site-web/
index.html committed
about.html (non modifié)
services.html (non modifié)
contact.html (non modifié)
css/
style.css (non modifié)
img/
logo.png (non modifié)
banner.jpg (non modifié)

État de Git

Dépôt propre

Les modifications ont été commitées. Prêt pour un push.

6

⚠️ Tentative de push : CONFLIT !

Ce qui se passe :

Le push échoue car le dépôt distant contient des modifications que vous ne possédez pas localement.

  • Vous exécutez git push
  • Git détecte que le dépôt distant a une version plus récente du même fichier
  • Git refuse d'accepter le push pour éviter de perdre les modifications de votre collègue
  • Le push échoue avec un message d'erreur

Message d'erreur typique

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

État de la synchronisation

Dépôt local

Commit v1.1 (votre modification)

Dépôt distant (serveur)

Commit v1.1 (du collègue) - DIFFÉRENT !

⚠️ CONFLIT : Les deux versions modifient le même fichier à la même ligne !

Erreur commune : Ne pas vérifier le statut du dépôt distant avant de faire un push !

7

Résoudre le conflit : git pull

Ce qui se passe :

Vous devez maintenant exécuter git pull pour récupérer les modifications du serveur et résoudre le conflit.

  • Git télécharge la version du serveur
  • Git détecte que vous avez modifié le même fichier à la même ligne
  • Git marque le fichier comme ayant un conflit de fusion (merge conflict)
  • Vous devrez manuellement choisir quelle version garder

Commande à exécuter

git pull

Conflit dans le fichier

Git ajoute des marqueurs de conflit dans le fichier :

<h1>
<<<<<<< HEAD
Bienvenue sur mon site web
=======
Welcome to our awesome website
>>>>>>> origin/main
</h1>

Apperçu de la fenêtre de gestion de conflit Vs Code

Explication :

  • <<<<<<< HEAD et >>>>>> origin/main sont des marqueurs ajoutés par Git pour indiquer les sections en conflit
  • ======= est un séparateur qui sépare les deux versions en conflit

Résolution du conflit

Lorsqu'il y a un conflit de fusion, vous devez absolument choisir une des 3 options suivante :

  • Option 1 : Garder votre version (Accepter la version actuelle)
  • Option 2 : Garder la version du serveur (Accepter la version entrante)
  • Option 3 : Fusionner les deux versions manuellement

Option 1 : Garder votre version

Vous acceptez VOTRE version locale du fichier. Ceci fera en sorte de conserver vos modifications et impactera le prochain commit.

Option 2 : Garder la version du serveur

Vous acceptez la version du serveur. Ceci fera en sorte de remplacer vos modifications locales par celles du serveur et impactera le prochain commit, ainsi que votre version locale.

Option 3 : Fusionner les deux

Vous fusionnez manuellement les deux versions en modifiant le fichier. Ceci fera en sorte de créer une nouvelle version fusionnée qui sera utilisée dans le prochain commit.

Une fusion est possible lorsque les modifications ne se chevauchent pas directement dans le fichier (elles ne sont pas sur les mêmes lignes de code)

Après avoir résolu le conflit, si vous êtes dans Vs Code, cliquez sur "Mark as Resolved" pour indiquer à Git que le conflit a été résolu. Git prépare alors le fichier pour le commit.

8

Finaliser la fusion : add, commit et push

Après avoir résolu le conflit :

  • Vous avez manuellement résolu le conflit dans le fichier
  • Git considère toujours que vous êtes en état de fusion incomplet
  • Vous devez terminer la fusion en faisant un commit de fusion

Étapes à suivre

1. Ajouter le fichier résolu à la zone de transit

git add index.html

2. Créer un commit de fusion

git commit -m "Résolution du conflit : fusion avec les changements du serveur"

3. Envoyer le commit de fusion au serveur

git push

Après le push réussi

Dépôt local et distant

✓ Synchronisés

✓ Conflit résolu

✓ Changements des deux côtés fusionnés

Résumé : git pull → résoudre conflit → git add → git commit → git push