Đoạn xem trước bài giảng

Conflits de fusion : ne paniquez pas - comprenons et résolvons

Les conflits effraient les débutants, mais après cette section, vous les accueillerez avec sérénité. Nous verrons pourquoi les conflits surviennent (Git ne lit pas dans les pensées - il ne sait pas quelle modification est la plus importante), comment lire les marqueurs de conflit et comment choisir la bonne solution. Nous présenterons deux approches : la résolution manuelle et l'utilisation d'outils de fusion.

conflit de fusion marqueurs de conflit résolution de conflit
Bạn sẽ học gì trong bài giảng này
  • Vous comprendrez la nature des conflits de fusion et vous n'en aurez plus peur - ils deviendront prévisibles.
  • Vous serez capable de résoudre vous-même un conflit manuellement en lisant correctement les marqueurs Git.
  • Vous apprendrez à configurer un outil de fusion dans votre éditeur pour une résolution visuelle des conflits.

Phần đầu bài giảng

Trois types de conflits de fusion

  • Contenu : modifications sur les mêmes lignes
  • Renommages : fichier modifié et renommé
  • Suppressions : fichier supprimé dans une branche, modifié dans l'autre
  • Les renommages sont les plus délicats pour Git
  • Vérifiez l'historique du fichier en cas de conflits suspects

Imaginez que vous travaillez sur un projet important et soudain, Git signale un conflit. La première étape vers la résolution est d'en comprendre le type. Les conflits de contenu surviennent lorsque des modifications ont affecté les mêmes lignes dans différentes branches. Les renommages sont plus complexes : un développeur change le nom du fichier pendant qu'un autre en modifie le contenu. Le troisième type concerne les suppressions, lorsqu'un fichier disparaît dans une branche mais continue d'exister dans l'autre. Ce sont les renommages qui posent le plus de difficultés car Git ne suit pas toujours correctement l'historique du fichier après un changement de nom. Par conséquent, en cas de conflits suspects, vérifiez toujours l'historique des modifications des fichiers.

Anatomie d'un conflit complexe

  • Les marqueurs <<<<<<< indiquent vos modifications
  • ======= sépare vos versions et celles des autres
  • >>>>>>> marque la fin du bloc en conflit
  • git status affichera tous les fichiers problématiques
  • git diff — comparaison détaillée des modifications

Supposons que vous fusionniez la branche feature dans main et que vous voyez un message de conflit. Ouvrez les fichiers problématiques — vous remarquerez des marqueurs spéciaux. Tout ce qui se trouve entre <<<<<<< HEAD et ======= correspond à vos modifications. Entre ======= et >>>>>>> feature se trouvent les modifications de la branche à fusionner. Utilisez git status pour voir tous les fichiers en conflit, et git diff pour un aperçu détaillé des différences. N'oubliez pas : les marqueurs ne sont pas une erreur, mais une indication de l'endroit où vous devez prendre une décision.

#!/bin/bash
# analyse_conflit.sh

echo "Création d'un dépôt de test"
mkdir demo-conflit && cd demo-conflit
git init

echo "Création d'un fichier et premier commit dans main"
echo 'Ligne 1' > fichier.txt
echo 'Ligne 2' >> fichier.txt
git add . && git commit -m 'Commit initial'

echo "Création d'une branche feature et modification de la première ligne"
git checkout -b feature
sed -i 's/Ligne 1/Ligne 1 modifiée dans feature/' fichier.txt
git commit -am 'Modification de la ligne 1 dans feature'

echo "Retour à main et modification de la même ligne"
git checkout main
sed -i 's/Ligne 1/Ligne 1 modifiée dans main/' fichier.txt
git commit -am 'Modification de la ligne 1 dans main'

echo "Tentative de fusion des branches"
git merge feature || echo 'Conflit !'

echo "\nAffichage du statut :"
git status --short

echo "\nAffichage du fichier en conflit :"
cat fichier.txt

Stratégies de résolution des conflits

  • Édition manuelle : supprimer les marqueurs, conserver le code souhaité
  • Outils graphiques : meld, kdiff3 pour la comparaison visuelle
  • --ours/--theirs : accepter sa version ou celle des autres
  • Lors d'un rebase, les conflits sont résolus pour chaque commit
  • Après résolution — n'oubliez pas git add et git commit

Lorsqu'un conflit est détecté, vous avez plusieurs options. Vous pouvez ouvrir le fichier manuellement, le modifier en supprimant les marqueurs et en conservant le code souhaité. Pour les visuels, des outils comme meld ou kdiff3 sont parfaits — ils affichent les trois versions du fichier simultanément. Si vous êtes sûr de vos modifications, utilisez git checkout --ours pour conserver votre version, ou --theirs pour celle des autres. Soyez particulièrement vigilant lors d'un rebase : les conflits peuvent survenir à chaque commit qui est rebasé.

#!/bin/bash
# resolve_strategies.sh

echo "Méthode 1 : Résolution manuelle"
echo 'Modifiez le fichier en supprimant les marqueurs de conflit'
echo 'Puis exécutez : git add fichier.txt'

echo "\nMéthode 2 : Accepter notre version"
git checkout --ours fichier.txt

echo "\nMéthode 3 : Accepter leur version"
git checkout --theirs fichier.txt

echo "\nMéthode 4 : Utiliser un outil de fusion"
echo 'git mergetool --tool=meld'

echo "\nAprès avoir choisi une méthode, finalisez la fusion :"
echo 'git commit -m "Résolution du conflit de fusion"'

Bài giảng đầy đủ dành cho thuê bao

Còn 34 slide nữa trong phiên bản đầy đủ.

Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.

Đăng nhập hoặc đăng ký Đăng ký thuê bao

Nội dung bài giảng

  1. Trois types de conflits de fusion
  2. Anatomie d'un conflit complexe
  3. Stratégies de résolution des conflits
  4. Prévention et bonnes pratiques
  5. Comment lire les conflits multilignes dans Git
  6. Décryptage des marqueurs de contexte
  7. Conflits imbriqués : stratégies de résolution
  8. Automatisation et outils avancés
  9. Stratégie de choix : HEAD ou branche ?
  10. Principe de la 'moindre surprise'
  11. Conflits sémantiques : les ennemis invisibles
  12. Outils et automatisation
  13. Choix de l'outil : quand utiliser quoi
  14. VS Code : configuration et fonctionnalités avancées
  15. Beyond Compare : scénarios pour les conflits complexes
  16. Intégration dans Git flow et automatisation
  17. Automatisation de la fusion via .gitattributes
  18. Écrire son propre merge driver
  19. Git rerere — votre assistant personnel
  20. Stratégies avancées d'automatisation
  21. Conception d'un workflow pour les grandes équipes
  22. La revue de code comme outil de prévention des conflits
  23. Stratégies pour gérer les branches de fonctionnalité à longue durée de vie
  24. Outils et automatisation de la résolution des conflits
  25. Les dangers de l'acceptation aveugle des modifications
  26. Stratégies de résolution de conflits sécurisées
  27. Tests après fusion : quoi vérifier
  28. Intégration avec CI/CD et mesures préventives
  29. Différences entre les conflits de rebase et de merge
  30. Travailler avec --rebase-merges
  31. Stratégies de résolution des conflits séquentiels
  32. Techniques avancées et débogage du rebase
  33. CI/CD en tant que système d'assurance qualité
  34. GitHub Actions : Vérification des conflits
  35. Danger-JS : Automatisation intelligente des vérifications
  36. Résolution automatique des conflits en CI/CD
  37. Conflits : de la panique à la maîtrise

Bài viết liên quan đến bài học này

Tất cả bài giảng của khóa học

  1. Introduction : Git du débutant au développeur confirmé
  2. À quoi sert Git exactement - et pourquoi il est indispensable pour trouver un emploi
  3. Installation et configuration : Préparer Git pour son premier démarrage
  4. Premier dépôt : init, add, commit et la magie de l'index
  5. Lire l'historique : log, diff, show et navigation dans le passé
  6. Branches : la réalité parallèle de votre code
  7. Annuler les erreurs : restore, reset, revert — faire les bons choix sans danger
  8. GitHub et les dépôts distants : votre code dans le cloud
  9. Travail d'équipe : Forks, branches de fonctionnalités et demandes d'intégration (pull requests)
  10. Conflits de fusion : ne paniquez pas - comprenons et résolvons
  11. Processus Git dans les équipes réelles : quel workflow choisir ?
  12. Outils avancés : rebase, stash, cherry-pick et les tags
  13. Projet final : Simulation d'un développement d'équipe réel