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.
- 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ê baoNội dung bài giảng
- Trois types de conflits de fusion
- Anatomie d'un conflit complexe
- Stratégies de résolution des conflits
- Prévention et bonnes pratiques
- Comment lire les conflits multilignes dans Git
- Décryptage des marqueurs de contexte
- Conflits imbriqués : stratégies de résolution
- Automatisation et outils avancés
- Stratégie de choix : HEAD ou branche ?
- Principe de la 'moindre surprise'
- Conflits sémantiques : les ennemis invisibles
- Outils et automatisation
- Choix de l'outil : quand utiliser quoi
- VS Code : configuration et fonctionnalités avancées
- Beyond Compare : scénarios pour les conflits complexes
- Intégration dans Git flow et automatisation
- Automatisation de la fusion via .gitattributes
- Écrire son propre merge driver
- Git rerere — votre assistant personnel
- Stratégies avancées d'automatisation
- Conception d'un workflow pour les grandes équipes
- La revue de code comme outil de prévention des conflits
- Stratégies pour gérer les branches de fonctionnalité à longue durée de vie
- Outils et automatisation de la résolution des conflits
- Les dangers de l'acceptation aveugle des modifications
- Stratégies de résolution de conflits sécurisées
- Tests après fusion : quoi vérifier
- Intégration avec CI/CD et mesures préventives
- Différences entre les conflits de rebase et de merge
- Travailler avec --rebase-merges
- Stratégies de résolution des conflits séquentiels
- Techniques avancées et débogage du rebase
- CI/CD en tant que système d'assurance qualité
- GitHub Actions : Vérification des conflits
- Danger-JS : Automatisation intelligente des vérifications
- Résolution automatique des conflits en CI/CD
- Conflits : de la panique à la maîtrise
Bài viết liên quan đến bài học này
- git merge: cách gộp nhánh và xử lý xung đột
- Git và GitHub: khác nhau thế nào và liên hệ ra sao
- Cách cài đặt Git trên Windows, macOS và Linux
- Git là gì và vì sao lập trình viên cần nó
- Git Bash: đó là gì và cách dùng trên Windows
Tất cả bài giảng của khóa học
- Introduction : Git du débutant au développeur confirmé
- À quoi sert Git exactement - et pourquoi il est indispensable pour trouver un emploi
- Installation et configuration : Préparer Git pour son premier démarrage
- Premier dépôt : init, add, commit et la magie de l'index
- Lire l'historique : log, diff, show et navigation dans le passé
- Branches : la réalité parallèle de votre code
- Annuler les erreurs : restore, reset, revert — faire les bons choix sans danger
- GitHub et les dépôts distants : votre code dans le cloud
- Travail d'équipe : Forks, branches de fonctionnalités et demandes d'intégration (pull requests)
- Conflits de fusion : ne paniquez pas - comprenons et résolvons
- Processus Git dans les équipes réelles : quel workflow choisir ?
- Outils avancés : rebase, stash, cherry-pick et les tags
- Projet final : Simulation d'un développement d'équipe réel