La fusion de branches est un aspect crucial des workflows Git collaboratifs. Elle permet aux développeurs d’intégrer les modifications provenant de différentes branches, consolidant ainsi les fonctionnalités et les améliorations dans une base de code unifiée. Ce tutoriel couvre les principaux types de fusion et la résolution des conflits.
Table des matières
Fusions Fast-Forward
Une fusion fast-forward est le type le plus simple. Elle se produit lorsque la branche dans laquelle vous fusionnez (la branche cible) est un descendant direct de la branche que vous fusionnez (la branche source). Cela signifie qu’il n’y a pas de commits divergents ; l’historique est linéaire. Git déplace efficacement le pointeur de la branche cible vers le dernier commit de la branche source sans créer de nouveau commit de fusion.
Exemple :
Supposons que vous ayez une branche main
et une branche feature
. Vous avez créé la branche feature
à partir de main
, effectué des commits sur feature
, et souhaitez maintenant fusionner feature
dans main
. Si aucun commit n’a eu lieu sur main
depuis la création de feature
, une fusion fast-forward aura lieu.
# Passer à la branche main
git checkout main
# Fusionner feature dans main
git merge feature
La sortie confirmera une fusion fast-forward, indiquant une intégration propre et efficace.
Fusions Récursives
Les fusions récursives gèrent les situations où les branches ont divergé. Cela se produit lorsque des commits ont été effectués à la fois sur les branches source et cible depuis qu’elles ont divergé d’un ancêtre commun. Git utilise un algorithme récursif pour combiner intelligemment ces modifications, ce qui entraîne généralement un nouveau commit de fusion sur la branche cible.
Exemple :
Si main
et feature
ont toutes deux reçu des commits depuis leur divergence, la fusion de feature
dans main
déclenche une fusion récursive.
# Passer à la branche main
git checkout main
# Fusionner feature dans main
git merge feature
Git créera un commit de fusion représentant les modifications combinées. La sortie indiquera qu’une stratégie de fusion récursive a été utilisée.
Résolution des conflits de fusion
Des conflits surviennent lorsque les mêmes lignes dans les mêmes fichiers ont été modifiées dans les deux branches. Git ne peut pas automatiquement décider quelles modifications conserver, il interrompt donc la fusion, marquant les sections conflictuelles dans les fichiers concernés.
Identification des conflits :
Git ajoute des marqueurs spéciaux (<<<<<<<
, =======
, >>>>>>>
) aux fichiers conflictuels et les liste dans la sortie d’état.
Résolution des conflits :
- Ouvrir les fichiers conflictuels : Examinez les sections marquées pour comprendre les modifications de chaque branche.
- Modifier les fichiers : Résolvez manuellement les conflits, en supprimant les marqueurs de conflit.
- Indexer les modifications : Utilisez
git add <fichier>
pour indexer les fichiers résolus. - Valider la fusion : Utilisez
git commit
pour terminer la fusion. Git crée un commit de fusion avec vos modifications résolues.
Exemple de fichier conflictuel :
<<<<<<>>>>>> feature
Vous devrez modifier cela pour sélectionner une ligne, ou une combinaison des deux.
En maîtrisant les fusions fast-forward et récursives, et en gérant efficacement les conflits, vous améliorerez votre workflow Git, permettant une collaboration efficace.