Branchement et fusion dans Git : le guide étape par étape

Professionnels de l’informatique

illustration d’une loupe

Dans les articles précédents, vous avez appris « Comment annuler une validation dans Git » (un tutoriel PowerShell Git) et à « Maîtriser la fusion dans Git : tutoriel sur les référentiels Git locaux et distants ». Vous pouvez également utiliser Git pour créer des branches dans votre projet. Le branchement Git permet à plusieurs développeurs de travailler sur un projet en modifiant le codebase de travail.

Dans cet article, vous découvrirez en détail le branchement Git, les différentes façons de créer des branches, ainsi que la fusion de ces branches dans un référentiel local ou distant.

Pour suivre ce tutoriel Git et apprendre comment créer des branches, vous aurez besoin des éléments suivants :

Qu’est-ce que le branchement Git ?

définition du branchement Git

Le branchement Git permet aux développeurs de dévier de la version de production du code pour corriger un bogue ou ajouter une fonctionnalité. Les développeurs créent des branches pour travailler avec une copie du code sans en modifier la version existante. Vous créez des branches pour isoler vos changements de code, que vous testez avant de les fusionner dans la branche principale (voir plus loin).

La branche principale (main) n’a rien de spécial. C’est la première branche créée lorsque vous initialisez un référentiel Git à l’aide de la commande git init.

Lorsque vous créez une validation (commit), Git identifie cet instantané de fichiers avec un hachage SHA-1 unique. Lors de la création d’une branche, Git crée un nouveau pointeur vers la même validation que celle sur laquelle la branche principale se trouve actuellement. Le diagramme ci-dessous montre que les deux branches ont le même instantané de code à ce stade.

diagramme de branches 1

Alors que vous créez des validations sur la nouvelle branche, Git crée de nouveaux pointeurs pour suivre les changements. Les dernières validations en date se trouvent désormais avant les validations de la branche principale. Au fur et à mesure que vous créez des validations, chaque branche garde la trace de sa version des fichiers.

diagramme de branches 2

Git sait quelle branche vous avez extraite (checkout) en utilisant un pointeur spécial appelé HEAD. Lorsque vous créez une branche, Git ne déplace pas immédiatement le pointeur HEAD vers cette nouvelle branche. Vous verrez HEAD dans le tutoriel lorsque vous créerez des branches et visualiserez le journal des validations.

diagramme de branches HEAD

Cette fonction de branchement est ce qui fait toute la force de Git. Plusieurs personnes créent des branches distinctes pour travailler sur leur code et fusionnent leurs changements dans la branche principale. Les branches sont censées être temporaires et devraient être supprimées une fois le travail terminé.

Stratégies de dénomination des branches

Vous pouvez donner n’importe quel nom à vos branches. Toutefois, votre organisation ou votre projet peut préciser des normes en matière de noms de branches. Par exemple, nommer la branche en fonction de la personne chargée de travailler sur la branche et ajouter une description ou un élément de travail :

  • nom d’utilisateur/description
  • nom d’utilisateur/élément de travail

Vous pouvez nommer une branche pour indiquer sa fonction, par exemple une fonctionnalité, un correctif de bogue ou un correctif de logiciel :

  • correctif de bogue/description
  • fonctionnalité/description
  • correctif de logiciel/description

Une autre stratégie de branchement consiste à dédier des branches aux différents cycles de développement, comme la fonctionnalité ou le correctif de logiciel. Lorsque des éléments de travail apparaissent, vous créez une branche pour cet élément à partir de sa branche respective. Oui, vous pouvez créer des branches à partir de branches ! Consulter l’option 4 ci-dessous pour découvrir un exemple.

Comment créer une branche dans Git

Voilà pour l’aspect théorique, il est temps de créer des branches ! Ces exemples utiliseront PowerShell 7 sur un système Windows 10 ; néanmoins, vous pouvez utiliser tout terminal compatible avec les commandes Git.

Option 1 : Création d’une branche

Pour créer une branche, utilisez la commande git branch suivie du nom de la branche. Après avoir créé la branche, utilisez à nouveau git branch pour visualiser les branches disponibles.

Notez que la création d’une branche par ce moyen ne fait pas automatiquement basculer vers la nouvelle branche. Git utilise un astérisque et une police de couleur différente pour identifier la branche active. Cette désignation représente le pointeur HEAD indiquant quelle branche est active.

  1. git branch <branch name>
  2. Git Branch

créer une branche

Option 2 : Création d’une branche à l’aide de Checkout

Si vous souhaitez créer une branche et l’extraire simultanément, utilisez la commande git checkout. Le paramètre -b permet de spécifier le nom de la branche. Notez qu’une fois la commande terminée, Git a déplacé le pointeur HEAD vers la nouvelle branche.

  1. git checkout -b <branch name>
  2. Git Branch

créer une extraction de branche

Option 3 : Création d’une branche à partir d’une validation

Vous pouvez créer une branche à partir d’une validation (commit) précédente sur une branche existante. Souvenez-vous qu’une validation est juste un instantané dans le temps des fichiers dans un référentiel. Vous créez une branche à partir d’une validation si vous souhaitez travailler sur un instantané spécifique des fichiers.

Avant de créer la branche, vous avez besoin de l’identifiant SHA-1 de la validation. Pour trouver l’identifiant, utilisez la commande git log qui permet d’afficher les validations précédentes. Chaque validation possède un hachage SHA-1 unique pour l’identifier ; toutefois, vous avez seulement besoin des premiers caractères pour identifier la validation.

Ensuite, utilisez la même commande git branch que dans l’option 1, mais ajoutez l’identifiant de validation à la fin. Dans cet exemple, on utilise 40b4d7 comme identifiant, issu de la deuxième validation.

Notez que le pointeur HEAD est sur la branche principale, qui est la branche active. Les autres branches jeff/feature1 et jeff/feature2 pointent vers la même validation que lorsque vous les avez créées précédemment. Les deux pointent vers le même instantané, étant donné qu’aucune branche n’a fait l’objet de validations supplémentaires depuis sa création.

  1. git log
  2. git branch <branch name> <identifier>

créer une validation de branche

Option 4 : Création d’une branche à partir d’une autre branche

Si vous utilisez des branches dédiées aux correctifs de logiciel ou aux fonctionnalités, vous créez des branches à partir de ces premières pour travailler sur l’élément. La création d’une branche à partir d’une autre branche est le même processus qu’une création à partir de la branche principale. Il suffit de spécifier le nom de l’autre branche comme point de départ. Cet exemple montre la création de la branche feature4 à partir de la branche develop.

  1. git checkout -b feature4 develop

Option 5 : Téléchargement d’une branche depuis un référentiel distant

Vous disposez d’une copie locale d’un référentiel pour travailler, tout comme d’autres développeurs. Ces développeurs travaillent sur des branches, qu’ils peuvent envoyer (push) vers un référentiel distant.

Il peut arriver que vous ayez à travailler sur une branche située sur un autre système que le vôtre. Vous pouvez extraire ou télécharger des branches spécifiques à partir d’un référentiel distant pour les utiliser sur votre système.

Dans un référentiel central hébergé au sein de GitHub, on remarque que les branches disponibles sont les mêmes que sur le système local (main, feature1, feature2, et hotfix1). Toutefois, une autre développeuse, Maggie, a une branche pour hotfix2 qui n’est pas située sur le système local. Maggie demande votre aide pour travailler sur un correctif de logiciel (hotfix). Vous devez donc télécharger cette branche sur votre système.

branches distantes

Pour récupérer la branche à partir du référentiel distant, utilisez git pull avec la source distance comme paramètre et spécifiez le nom de la branche. Si vous vérifiez les branches locales disponibles, vous verrez que la nouvelle branche n’apparaît pas automatiquement. Cependant, vous pouvez extraire la branche et commencer à travailler sur celle-ci.

  1. git pull origin <branch name>
  2. Git Branch
  3. git checkout -b <branch name>
  4. Git Branch

git pull remote branch

Fusionner des branches

Une fois que vous avez terminé de travailler sur votre branche, il est temps de la fusionner dans la branche principale. La fusion permet d’implémenter les modifications apportées à votre branche dans la branche principale. En fonction de l’historique de validation, Git effectue des fusions de deux manières : l’avance rapide (fast-forward) et la fusion à trois sources (three-way merge). Examinons les deux méthodes en nous basant sur les branches et l’historique de validation dans le diagramme suivant.

diagramme de fusion 1

Lorsque vous fusionnez la branche hotfix dans la branche main, Git déplace le pointeur de la branche principale vers commit nr7jk. Git fait cela parce que la branche hotfix partage une validation ancêtre directe avec la branche main et se trouve directement avant sa validation. Cette validation est une fusion en avance rapide.

avance rapide

Une fois que vous avez fusionné la branche hotfix, continuez à travailler sur la branche feature1. À mesure que vous effectuez des validations sur la branche feature1, l’historique de validation diverge.

historique de validation divergent

Git ne peut pas déplacer le pointeur vers la dernière validation comme dans une validation à avance rapide. Pour intégrer la branche feature1 dans la branche main, Git effectue une fusion à trois sources. Git prend un instantané de trois validations différentes pour en créer une nouvelle :

  • La validation en commun que partagent les deux branches (a90hb)
  • La dernière validation de la branche (az84f)
  • La validation de la branche dans laquelle fusionner (nr7jk)

validation de fusion à trois sources

La fusion des branches dans un référentiel local

Pour fusionner des branches localement, utilisez git checkout afin de basculer vers la branche dans laquelle vous souhaitez fusionner. Cette branche est généralement la branche principale, ou main. Ensuite, utilisez git merge et spécifiez le nom de l’autre branche à intégrer à cette branche. Dans cet exemple, on fusionne la branche jeff/feature1 dans la branche main. Notez qu’il s’agit d’une fusion en avance rapide.

  1. git checkout main
  2. git merge jeff/feature1

 

git merge ff

Le travail continue sur la branche principale et les autres branches, de sorte qu’elles ne partagent plus d’historique de validation. Maintenant, un développeur souhaite fusionner la branche jeff/feature2 dans la branche principale. Cette fois-ci, Git effectue une validation de fusion à trois sources (ou récursive).

  1. git checkout main
  2. git merge jeff/feature2

git recursive merge

Fusionner des branches dans un référentiel distant

Si vous créez une branche dans votre référentiel local, le référentiel distant ignore l’existence de cette branche. Avant de pouvoir envoyer par push le code de la branche dans le référentiel distant, vous devez définir le référentiel distant comme la branche amont à l’aide de la commande git push. Simultanément, cette commande définit la branche amont et envoie le contenu de la branche vers le référentiel distant.

  1. git push –set-upstream origin <branch name>

git push set upstream

Fusionner la branche principale dans une autre branche

Pendant que vous travaillez sur votre branche, d’autres développeurs peuvent mettre à jour la branche main avec leur branche. Cela signifie que votre branche n’est plus à jour de la branche main et qu’il lui manque du contenu. Vous pouvez fusionner la branche main dans votre branche en extrayant votre branche et en utilisant la même commande git merge.

  1. git checkout -b <branch name>
  2. git merge main

git merge to branch

FAQ sur Git

En quoi consiste la création d’une branche dans Git ?

Créer une branche revient à prendre un instantané du code existant afin de pouvoir travailler dessus indépendamment de la branche principale.

Comment puis-je créer une branche dans Git ?

Utilisez la commande git branch et spécifiez le nom de la branche, par exemple, git branch feature1.

Comment puis-je voir quelle branche est active ?

Utilisez git branch pour voir les branches disponibles et celle qui est active. Git désigne généralement la branche active par un astérisque et une police de couleur différente.

Comment passer à une autre branche pour y travailler ?

Utilisez git checkout et le nom de la branche pour la rendre active.

Puis-je créer une branche à l’intérieur d’une autre branche ?

Oui, il suffit de spécifier le nom de la branche qui servira de base à la nouvelle branche, par exemple, git branch feature-bug feature1.

Ma branche existe uniquement au niveau local. Comment l’ajouter à mon référentiel distant Git ?

Utilisez la commande git push pour établir la branche amont, par ex. git push –set-upstream origin <branch name>.

Comment puis-je mettre à jour la branche principale avec les changements apportés à ma branche ?

Basculez vers la branche principale à l’aide de la commande git checkout, puis fusionnez la branche grâce à la commande git merge associée au nom de la branche.

Comment supprimer une branche ?

Lorsque vous avez terminé avec une branche, supprimez-la à l’aide de la commande git branch et du paramètre -d, par ex. git branch -d feature1.

Conclusion

Le branchement Git est une fonctionnalité puissante qui permet aux équipes de travailler sur le code indépendamment les unes des autres. Savoir comment créer, nommer et fusionner des branches est une compétence essentielle pour tout développeur, administrateur système ou ingénieur DevOps.

Jeff Brown

Jeff Brown

Jeff Brown est un ingénieur en informatique Cloud, spécialisé dans les technologies Microsoft telles qu'Office 365, Teams, Azure et PowerShell.

 

Votre cybersécurité est-elle au cœur de votre infrastructure ?

Bénéficiez d'une évaluation personnalisée des risques auxquels sont exposées vos données, effectuée par des ingénieurs passionnés par la sécurité des données.