Comme appris dans les niveaux précédents, les branches sont faciles à manipuler et se réfèrent aux commits qui ont été faits pour compléter le travail fait sur celles-ci. Les branches sont donc constamment en mouvement.

Dans ce cas, vous vous demandez peut-être s'il y a un moyen d'ajouter une marque permanente dans l'historique de votre projet. Pour des commits comme des livraisons majeures ou d'importantes fusions, existe-t-il une façon plus stable qu'une branche de garder l'état d'une branche à un instant précis ?

Vous l'avez deviné ! Les tags Git offrent cette fonctionnalité : les tags marquent à jamais certains commits comme "milestone" (étape clé) auxquels vous pouvez vous référer comme à des branches.

Encore plus important, il sont définitifs. Vous ne pouvez donc pas rajouter de commit dans un tag : les tags sont un peu comme un pointeur définitif dans l'arbre des commits.

Voyons les tags en pratique.

Avant git tag

Git avant git tag prototype


Essayons de faire un tag sur C1 (qui représente la version 1 de notre prototype). git v1 C1

Après git tag

Git apres git tag prototype


Voila, facile non ? Nous nommons le tag v1 et il pointe vers le commit C1. Si vous ne spécifiez pas le commit, le tag pointera là où se trouve HEAD.

Pour ce niveau, créez simplement les tags visibles dans les objectifs puis faites un checkout sur le tag v1. Remarquez comment vous vous retrouvez dans l'état HEAD détachée -- c'est parce que vous ne pouvez pas commiter sur le tag v1.
Dans les niveaux suivants vous verrez un cas plus intéressant d'utilisation des tags.