Les branches Git
Introduction aux branches¶
Qu’est-ce qu’une branche Git ?
Une branche Git est une ligne de développement indépendante dans un dépôt. Elle permet de travailler sur de nouvelles fonctionnalités ou correctifs de manière isolée, sans affecter la version stable du projet sur la branche principale.
Avantages des branches Git
- Isolation des modifications : Les branches permettent d’expérimenter et de développer des fonctionnalités sans risque d’introduire des bugs dans le code principal.
- Collaboration facilitée : Plusieurs développeurs peuvent travailler sur différentes branches en parallèle sans risque de conflits.
- Gestion des versions : Les branches permettent de maintenir différentes versions d’un projet, par exemple, une version stable pour la production et une autre pour le développement.
- Revue de code et tests : Les branches facilitent la revue de code et les tests, car les modifications peuvent être fusionnées dans la branche principale après validation.
- Historique clair : Elles offrent un historique de développement clair, permettant de suivre l’évolution de chaque fonctionnalité ou correctif.
Comment nommer une branche ?¶
Nous allons adopter les conventions suivantes pour nommer les branches :
- Le nom d’une branche est toujours de la forme :
<prefix>/<name>
. - Les
<prefix>
possibles sont :feature/
: pour les nouvelles fonctionnalités.test/
: pour les tests.bugfix/
: pour les correctifs de bugs.experiment/
: pour des essais.improvement/
: pour des améliorations (qualité du code).
<name>
est toujours en kebab-case.
Opérations sur les branches¶
Créer une branche¶
Vous pouvez créer une nouvelle branche avec git branch <prefix>/<name>
puis aller sur cette branche avec git checkout <prefix>/<name>
.
Par exemple :
git branch feature/assign-students-to-houses
git checkout feature/assign-students-to-houses
Ou directement :
git checkout -b feature/assign-students-to-houses
pour créer et aller sur la branche en une seule commande.
Lister les branches¶
Pour lister toutes les branches locales (et distantes avec l’option -a
):
git branch -a
Vous pouvez voir les branches qui sont en cours de travail et celles qui sont déjà fusionnées avec la branche main
avec les options --no-merged
et --merged
respectivement.
git branch -a --no-merged main
git branch -a --merged main
Supprimer une branche¶
Supprimer les branches fusionnées
Il faut supprimer les branches qui sont déjà fusionnées dans la branche principale.
Pour supprimer une branche qui est déjà fusionnée :
git branch -d <prefix>/<name>
Supprimer les branches en cours de travail
Pour supprimer une branche en cours de travail mais que vous allez abandonner :
git branch -D <prefix>/<name>
Souvent, ce sont des branches experiment
que vous allez potentiellement abandonner. De façon générale, il faut éviter de supprimer les branches en cours de travail pour ne pas perdre les modifications.
Travailler en équipe avec des branches¶
Éviter les conflits¶
- Branches disjointes : Les branches ne doivent pas modifier les mêmes fichiers.
- Un(e) responsable par branche : Chaque branche (dont
main
) doit avoir un(e) seul(e) responsable, mais les autres membres peuvent contribuer. git merge main
: Quand une branche est fusionnée avec la branche principale, les autres branches en cours de travail doivent récupérer ces modifications en utilisant la commandegit merge main
. Cela permet de ne pas avoir à résoudre des conflits complexes lors des merge requests.
Merge request¶
- Merge request
- Demande de fusion d’une branche de travail vers la branche principale.
Le responsable de la branche de travail devrait faire le merge request.
Résoudre les conflits avant de soumettre le merge request
Le responsable de la branche de travail devrait résoudre les conflits avant de soumettre le merge request en faisant git merge main
dans sa branche.
Pour soumettre un merge request en utilisant l’interface GitLab.
- Allez dans Code > Merge requests.
- Cliquez sur New merge request.
- Choisissez la branche de travail comme source branch et
main
comme target branch. - Cliquez sur Compare branches and continue.
- Écrivez un titre et une description de la demande.
- Choisissez Assignees : seul le responsable de la branche suffit.
- Choisissez Reviewers : seul le responsable de la branche
main
suffit. - Dans Merge options, cochez Delete source branch when merge request is accepted.
- Cliquez sur Create merge request.
Assignee et Reviewer
Assigne est celui qui va résoudre les problèmes dans le code soumis (typiquement les conflits de fusions). Reviewer est celui qui va examiner le code soumis et valider la fusion. Le reviewer peut faire des commentaires sur le code que vous avez et demander des changements (à faire par assignee) avant de faire la fusion.
Pull request
Un pull request est la même chose qu’un merge request. Le terme pull request est utilisé par GitHub et le terme merge request est utilisé par GitLab.
Changer de branches en cours de travail¶
Si vous êtes en cours de travail et que vous avez besoin de changer de branches pour travailler sur d’autres fonctionnalités, la façon la plus sécurisée pour ne pas accidentellement perdre vos modifications est de faire un commit de votre travail courant avant de changer de branche.
Une autre possibilité est de garder ces modifications dans une pile de travail.
- Par exemple, vous êtes en train de travailler sur
feature/assign-students-to-houses
et un autre membre du groupe vous demande de l’aide surbugfix/crash-on-startup
. - Vous n’êtes pas prêt pour faire un commit de
feature/assign-students-to-houses
parce que vous voulez garder un historique propre. - Vous pouvez utiliser la commande
git stash push -u -m "<message>"
pour mettre toutes les nouvelles modifications (-u
inclus les nouveaux fichiers crées) depuis le dernier commit dans un élément d’une pile de travail gardé par Git avec un<message>
explicatif. - Vous pouvez ensuite faire
git checkout bugfix/crash-on-startup
et travailler sur la branchebugfix/crash-on-startup
. - Une fois que êtes revenu à
feature/assign-students-to-houses
, vous pouvez utiliser la commandegit stash pop
pour remettre vos modifications et enlever l’élément correspondant de la pile.
git stash list
git stash list
La commande git stash list
permet de voir les éléments de la pile de travail.
Si vous avez plusieurs éléments, git stash pop
récupère toujours l’élément le plus récent (stash@{0}
).
Vous pouvez aussi choisir l’élément que vous voulez récupérer avec git stash pop stash@{<numéro>}
.