Aller au contenu principal

Gestion des branches dans Git

remarque

Pour suivre les étapes de cette section, vous pouvez cloner le dépôt git-branch.

git clone https://github.com/archambaultv-prof/git-branch.git

Conceptuellement, nous avons vu jusqu'à maintenant qu'un dépôt Git est constitué du répertoire courant, de l'index, du pointeur HEAD et de l'historique des commits. Nous allons maintenant ajouter la notion de branches.

Le répertoire courant est l'endroit où vous travaillez, c'est-à-dire le dossier qui contient les fichiers de votre projet. L'index est une zone de préparation qui contient les fichiers qui seront validés lors de la prochaine validation. Le pointeur HEAD est un pointeur spécial qui indique l'endroit où vous vous trouvez dans l'historique du projet. Nous savons maintenant que les branches sont aussi des pointeurs vers des validations dans l'historique du projet.

En fait, en pratique, HEAD est généralement un pointeur vers une branche (c'est donc un pointeur vers un pointeur), mais il peut aussi pointer directement vers une validation (on parle alors de "detached HEAD"). Lorsque HEAD pointe vers une branche, cela signifie que vous travaillez sur cette branche. Concrètrement cela signifie que lorsque le pointeur HEAD sera mise à jour après une validation, la branche vers laquelle il pointe sera aussi mise à jour avec la nouvelle validation.

Donc la branche courante est la branche sur laquelle vous travaillez actuellement, dans le sens où le pointeur de cette branche est constamment mis à jour lorsque vous effectuez des validations.

Lister les branches disponibles

Pour lister les branches disponibles dans votre dépôt, vous pouvez utiliser la commande suivante :

git branch
* main

Cette commande affiche la liste des branches locales dans votre dépôt. La branche courante est indiquée par un astérisque (*) à côté de son nom. Le dépôt que vous avez cloné contient en réalité trois branches sur le serveur. Pour lister les branches distantes, vous pouvez utiliser la commande suivante :

git branch -r
origin/HEAD -> origin/main
origin/agentjean
origin/asterix
origin/main

Cela nous indique que le dépôt distant (origin) contient trois branches agentjean, asterix et main. Le pointeur HEAD du serveur pointe vers la branche main, ce qui signifie que c'est la branche par défaut du dépôt distant.

Créer une nouvelle branche locale

Pour créer une nouvelle branche locale, vous pouvez utiliser la commande suivante :

git switch -c luckyluke

L'option -c permet de créer une nouvelle branche et de basculer dessus. Il existe aussi la commande git checkout -b luckyluke qui fait la même chose, mais la commande git switch est plus récente et plus intuitive pour changer de branche.

Pour confirmer que vous êtes bien sur la nouvelle branche, vous pouvez utiliser la commande git branch :

git branch
* luckyluke
main

Ajoutons un fichier fichierC.txt dans cette nouvelle branche et validons-le :

echo "Arizona 1880" > fichierC.txt
git add fichierC.txt
git commit -m "Ajout de fichierC.txt pour Lucky Luke"

Créer une nouvelle branche à partir d'une branche distante

Nous avons vu comment créer une nouvelle branche locale à partir de la branche courante. Il est aussi possible de créer une nouvelle branche à partir d'une branche distante. Pour cela, vous pouvez utiliser la commande suivante :

git switch --track origin/agentjean

Cela va créer une nouvelle branche locale agentjean qui suit la branche distante origin/agentjean. Vous pouvez vérifier que la branche a été créée et que vous êtes bien dessus en utilisant la commande git branch -vv :

git branch -vv
* agentjean 6ae575b [origin/agentjean] Ajout du 3e album
luckyluke 63d22ec Ajout de fichierC.txt pour Lucky Luke
main e488189 [origin/main] Validation initiale

L'option -vv permet d'afficher les branches locales avec leur correspondance avec les branches distantes. Vous pouvez voir que la branche agentjean est à jour avec la branche distante origin/agentjean. La branche luckyluke est une branche locale qui n'a pas de correspondance avec une branche distante, et la branche main est à jour avec la branche distante origin/main.

Changer de branche

Pour simplement changer de branche, sans en créer une nouvelle, vous pouvez utiliser la commande git switch suivie du nom de la branche :

git switch main