Les branches git

Qu’est ce qu’une branche ?

Créer une branche, c’est en quelque sorte comme créer une “copie” de votre projet pour développer et tester de nouvelles fonctionnalités sans impacter le projet de base.

Dans la plupart des système de contrôle de version, justement, une copie physique de la totalité du répertoire de travail est effectuée, ce qui rend la création de branches contraignante et en fait une opération lourde.

Git a une approche totalement différente des branches qui rend la création de nouvelles branches et la fusion de branche très facile à réaliser. Une branche, dans Git, est simplement un pointeur vers un commit (une branche n’est qu’un simple fichier contenant les 40 caractères de l’empreinte SHA-1 du commit sur lequel elle pointe).

Pour rappel, lorsqu’on effectue un commit, Git stocke en fait un objet commit qui contient les nom et prénom de l’auteur du commit, le message renseigné lors de la création du commit ainsi qu’un pointeur vers l’instantané du contenu indexé et des pointeurs vers le ou les commits précédant directement le commit courant.

Un pointeur est un objet qui contient l’adresse d’une donnée stockée quelque part. On peut utiliser le pointeur pour accéder à la donné en question.

La branche par défaut dans Git s’appelle master. Cette branche master va se déplacer automatiquement à chaque nouveau commit pour pointer sur le dernier commit effectué tant qu’on reste sur cette branche.

Notez que la branche master n’est pas une branche spéciale pour Git : elle est traitée de la même façon que les autres branches. L’idée est que lorsqu’on tape une commande git init, une branche est automatiquement créée et que le nom donné à cette branche par Git par défaut est “master”. On pourrait très bien la renommer ensuite mais ça ne présente généralement aucun intérêt.

En résumé, une branche est un pointeur vers un commit en particulier. Un commit est un objet qui contient un pointeur vers l’instantané du contenu indexé ainsi que des pointeurs vers le ou les commits le précédant directement.

Ainsi, créer une nouvelle branche dans Git crée simplement un nouveau pointeur plutôt que de recopier l’intégralité du répertoire de travail.

 

Créer une nouvelle branche

Pour créer une nouvelle branche, on utilise la commande git branch nom-de-la-branche. Cette syntaxe va créer un nouveau pointeur vers le dernier commit effectué (le commit courant). A ce stade, vous allez donc avoir deux branches (deux pointeurs) vers le dernier commit : la branche master et la branche tout juste créée.

Création d'une branche dans git

Illustration branche git

Pour déterminer quel pointeur vous utilisez, c’est-à-dire sur quelle branche vous vous trouvez, Git utilise un autre pointeur spécial appelé HEAD. HEAD pointe sur la branche master par défaut. Notez que la commande git branch permet de créer une nouvelle branche mais ne déplace pas HEAD.

Nous allons donc devoir déplacer explicitement HEAD pour indiquer à Git qu’on souhaite basculer sur une autre branche. On utilise pour cela la commande git checkout suivi du nom de la branche sur laquelle on souhaite basculer.

La commande git checkout

Exemple d'utilisation de la commande git checkout

Note : On peut également utiliser git checkout -b pour créer une branche et basculer immédiatement dessus. Cela est l’équivalent d’utiliser git branch puis git checkout.

HEAD pointe maintenant vers notre branche test. Si on effectue un nouveau commit, la branche test va avancer automatiquement tandis que master va toujours pointer sur le commit précédent. C’est en effet la branche sur laquelle on se situe lors d’un commit qui va pointer sur ce commit.

Le pointeur git head

Illustration de git head

 

Basculer entre les branches

On peut revenir sur notre branche master en tapant à nouveau une commande git checkout master. Cela replace le pointeur HEAD sur la branche master et restaure le répertoire de travail dans l’état de l’instantané pointé par le commit sur lequel pointe master.

git checkout master

Exemple de git checkout master

Si on modifie alors le répertoire de travail et qu’on effectue un nouveau commit, les deux branches master et test vont diverger. On va donc avoir deux branches pointant vers des instantanés qui ont enregistré le projet dans deux états différents.

Branches divergentes git

Illustration de branches divergentes git

Laisser un commentaire

© Pierre Giraud - Toute reproduction interdite