Using branches

branche git


Ce document examine en détail la commande git branch et aborde le modèle de création de branches Git dans son ensemble. La création de branches est une fonctionnalité disponible dans la plupart des systèmes de contrôle de version modernes. Dans d'autres systèmes de contrôle de version, la création de branches peut être une opération gourmande à la fois en temps et en espace disque. Dans Git, les branches font partie de votre process de développement quotidien. Elles constituent un pointeur efficace vers un instantané de vos changements. Lorsque vous souhaitez ajouter une nouvelle fonctionnalité ou correction de bug (quelle que soit sa taille), vous créez une branche pour encapsuler vos changements. Il est ainsi plus compliqué de merger du code instable dans la base de code principale, et vous avez l'opportunité de nettoyer votre historique avant de le merger dans la branche principale.

Git Tutorial: git branch

Le schéma ci-dessus illustre un dépôt comprenant deux lignes de développement distinctes : l'une est destinée à une petite fonctionnalité et l'autre, à une fonctionnalité utilisée à plus long terme. Le développement de fonctionnalités dans des branches vous permet de travailler sur deux fonctionnalités en parallèle. De plus, vous évitez de polluer la branche master principale avec du code douteux.

L'implémentation des branches Git est beaucoup plus légère que d'autres modèles de système de contrôle de version. Au lieu de copier des fichiers de répertoire en répertoire, Git stocke une branche en tant que référence à un commit. En ce sens, une branche représente la pointe d'une série de commits, ce n'est pas un conteneur de commits. L'historique d'une branche est extrapolé à l'aide des relations entre les commits.

Tandis que vous poursuivez votre lecture, n'oubliez pas que les branches Git sont différentes des branches SVN. Alors que les branches SVN sont utilisées de manière occasionnelle pour marquer les étapes importantes de votre développement, les branches Git font partie intégrante de votre workflow quotidien. La section suivante étudie en détail l'architecture de création de branches Git interne.

Fonctionnement

Une branche représente une ligne de développement indépendante. Les branches schématisent de façon abstraite le process d'édition, de staging et de commit. Vous pouvez les considérer comme un moyen de demander un nouveau répertoire de travail, une nouvelle zone de staging et un nouvel historique de projet. Les nouveaux commits sont enregistrés dans l'historique de la branche actuelle, ce qui provoque la création d'un fork dans l'historique du projet.

La commande git branch sert à créer, à répertorier, à renommer et à supprimer des branches. En revanche, elle ne permet pas de basculer entre les branches ou de reconstituer un historique forké. C'est la raison pour laquelle la commande git branch est étroitement liée aux commandes git checkout et git merge.

Options communes

git branch

Permet de répertorier toutes les branches de votre dépôt. Cette commande est synonyme de git branch --list.

git branch <branche>

Permet de créer une branche nommée <branche>. Cette opération ne permet pas de faire un check-out de la nouvelle branche.

git branch -d <branche>

Permet de supprimer la branche spécifiée. C'est une opération « sûre » dans la mesure où Git vous empêche de supprimer la branche lorsqu'elle contient des changements non mergés.

git branch -D <branche>

Permet de forcer la suppression de la branche spécifiée, même lorsqu'elle contient des changements non mergés. C'est la commande à utiliser si vous souhaitez supprimer définitivement tous les commits associés à une ligne de développement spécifique.

git branch -m <branche>

Permet de renommer la branche actuelle en <branche>.

git branch -a

Permet de répertorier toutes les branches distantes. 

Créer des branches

Il est important de comprendre que les branches sont juste des pointeurs vers des commits. Lorsque vous créez une branche, Git doit simplement créer un nouveau pointeur, il ne modifie le dépôt d'aucune manière. Donc, si vous commencez avec un dépôt qui ressemble à ceci :

Git Tutorial: repository without any branches

Vous créez ensuite une branche avec la commande suivante :

git branch crazy-experiment

L'historique du dépôt ne change pas. Vous obtenez simplement un nouveau pointeur vers le commit actuel :

Git Tutorial: Create new branch

Remarque : cette commande permet uniquement de créer la branche. Pour y ajouter des commits, vous devez la sélectionner avec git checkout, puis exécuter les commandes standard git add et git commit

Création de branches distantes

Jusqu'à présent, nos exemples illustraient tous des opérations sur une branche locale. La commande git branch fonctionne également sur les branches distantes. Afin d'utiliser des branches distantes, vous devez d'abord configurer un dépôt distant et l'ajouter à la configuration du dépôt local.

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Vous ajoutez le dépôt distant à la configuration du dépôt local
$ git push <new-remote-repo> crazy-experiment~
# Vous faites un push de la branche crazy-experiment vers new-remote-repo

Cette commande fait un push d'une copie de la branche locale crazy-experiment vers le dépôt dépôt distant <remote>.

Suppression de branches

Lorsque vous avez terminé de travailler sur une branche et que vous l'avez mergée dans la base de code principale, vous pouvez la supprimer sans perdre l'historique :

git branch -d crazy-experiment

Toutefois, si la branche n'a pas été mergée, la commande ci-dessus renverra un message d'erreur :

error: The branch 'crazy-experiment' is not fully merged.
If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

Vous évitez ainsi de perdre votre accès à toute cette ligne de développement. Si vous souhaitez réellement supprimer la branche (p. ex., en cas d'expérience ratée), utilisez le flag -D en majuscules :

git branch -D crazy-experiment

Cette opération supprime la branche, quel que soit son état, et sans avertissement. Par conséquent, utilisez-la avec précaution.

La commande précédente supprime une copie locale d'une branche. La branche peut continuer d'exister dans des dépôts distants. Pour supprimer une branche distante, exécutez la commande suivante 

git push origin --delete crazy-experiment

Ou

git push origin :crazy-experiment

Cette commande fait un push d'un signal de suppression vers le dépôt origin distant, ce qui déclenche la suppression de la branche crazy-experiment.

Résumé


Dans ce document, nous avons abordé le comportement de création de branches de Git et la commande git branch. Les fonctions principales de la commande git branch sont de créer, répertorier, renommer et supprimer des branches. Pour poursuivre l'exécution sur les branches restantes, elle est couramment utilisée avec d'autres commandes comme git checkout. Pour en savoir plus sur les opérations de branche avec git checkout, comme le basculement et le merge de branche, consultez la page git checkout.

Par rapport aux autres systèmes de contrôle de version, les opérations de branche Git sont économiques et fréquemment utilisées. Cette flexibilité permet de puissantes personnalisations du workflow Git. Pour de plus amples informations sur les workflows Git, consultez nos pages de discussion approfondies à ce sujet :
Workflow de branche par fonctionnalité
, Workflow Gitflow et Workflow de duplication (fork)

Prêt à tester la création de branches ?

Essayez ce tutoriel interactif.

Démarrez maintenant