Prise en main de Git — Chapitre 4 / 4
Résoudre les conflits
Les conflits font peur à beaucoup de gens. Mais ils sont normaux. Ce chapitre t'apprend à les comprendre et à les résoudre calmement.
Un conflit, c'est quoi ?
Mot clé : conflit de merge
Un conflit arrive quand deux branches ont modifié la même partie du même fichier. Git ne sait pas quelle version garder. Il te demande de choisir.
Guide complet sur les conflits de merge →Imagine un document partagé. Toi et un collègue modifiez le même paragraphe en même temps. Le logiciel ne sait pas quelle version garder. Il vous demande de décider ensemble.
C'est exactement ce qui se passe avec Git. Un conflit n'est pas une erreur. C'est Git qui te dit : "je ne peux pas décider à ta place".
Point important
Git résout automatiquement la plupart des fusions. Un conflit ne se produit que quand les mêmes lignes ont été modifiées dans les deux branches. Si deux branches modifient des fichiers différents, ou des parties différentes du même fichier, Git fusionne tout seul.
Quand un conflit arrive-t-il ?
Voici un exemple concret :
Tu crées une branche depuis main
Le fichier index.html contient : "Hello".
Sur ta branche, tu changes "Hello" en "Bonjour"
Tu fais un commit avec ce changement.
Pendant ce temps, quelqu'un change "Hello" en "Welcome" sur main
Un commit est fait sur main avec ce changement.
Tu essaies de fusionner ta branche dans main
Git dit : "Conflit ! La même ligne a été changée des deux côtés."
Lire les marqueurs de conflit
Mot clé : marqueurs de conflit
Quand un conflit se produit, Git ajoute des marqueurs dans le fichier. Ces marqueurs montrent les deux versions côte à côte. Ils commencent par <<<<<<< et finissent par >>>>>>>.
Voici à quoi ressemble un fichier avec un conflit :
<<<<<<< HEAD
Le contenu de ta branche actuelle (HEAD)
=======
Le contenu de l'autre branche
>>>>>>> feature/header
Chaque marqueur a un rôle précis :
<<<<<<< HEAD
Début du conflit. Ce qui suit vient de ta branche (celle où tu es).
=======
Séparateur. Il sépare les deux versions. Au-dessus : ta branche. En-dessous : l'autre branche.
>>>>>>> feature/header
Fin du conflit. Le nom après les flèches est le nom de l'autre branche.
Résoudre un conflit : les 4 étapes
La résolution d'un conflit suit toujours les mêmes étapes. Pas de panique. Suis ce processus.
Voir quels fichiers sont en conflit
Tape git status. Les fichiers en conflit apparaissent en rouge avec la mention "both modified".
$ git status
both modified: index.html
Lire le fichier avec les marqueurs
Ouvre le fichier pour voir les deux versions. Dans le simulateur, utilise cat index.html.
Écrire le contenu final
Supprime les marqueurs <<<<<<<, ======= et >>>>>>>. Garde la version que tu veux. Tu peux garder une version, l'autre, ou un mélange des deux.
# Dans le simulateur :
$ echo "<footer>Version finale</footer>" > index.html
Marquer comme résolu et commiter
Dis à Git que le conflit est résolu. Utilise git add pour marquer le fichier comme résolu. Puis fais un commit pour terminer la fusion.
$ git add index.html
$ git commit -m "Resolve conflict"
Annuler un merge en cours
Mot clé : git merge --abort
Si tu es perdu pendant un conflit, tu peux tout annuler. La commande git merge --abort revient à l'état d'avant le merge. Rien n'est perdu. Tu peux recommencer quand tu es prêt.
$ git merge --abort
# Annule le merge en cours
# Tu reviens à l'état d'avant
# Tu peux réessayer quand tu veux
Comment réduire les conflits
Les conflits sont normaux. Mais tu peux les réduire avec quelques bonnes pratiques :
Fais des petits commits
Moins tu modifies de lignes, moins tu risques de conflit. Un commit = une action.
Fusionne souvent
Plus tu attends pour fusionner, plus les branches divergent. Plus elles divergent, plus les conflits sont probables.
Communique avec ton équipe
Si tu sais que quelqu'un travaille sur le même fichier, coordonne-vous. C'est le meilleur moyen d'éviter les surprises.
Découpe ton code en petits fichiers
Plus les fichiers sont petits, moins il y a de chances que deux personnes modifient le même.
Pour aller plus loin
Erreurs fréquentes
- ●Laisser les marqueurs
<<<<<<<dans le code. Le fichier ne fonctionnera pas avec les marqueurs dedans. Tu dois les supprimer. - ●Faire
git add+git commitsans vérifier le contenu du fichier. Lis toujours le fichier après avoir résolu le conflit. - ●Supprimer le contenu de l'autre personne sans le lire. Prends le temps de comprendre les deux versions avant de choisir.
- ●Paniquer et toujours faire
git merge --abort. C'est bien de savoir que ça existe. Mais résoudre un conflit est une compétence importante.
Ton avis compte
Aide-nous à améliorer cette formation en partageant ton retour.