Les tags Git marquent un point précis de l’historique, typiquement une release. Contrairement aux branches (qui bougent à chaque commit), un tag est un pointeur fixe vers un commit spécifique. Ce guide vous apprend à créer, gérer et pousser des tags, en suivant les conventions du Semantic Versioning.
Prérequis : enregistrer des modifications et consulter l’historique.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- La différence entre tags légers et tags annotés
- Créer, lister, supprimer des tags
- Pousser des tags vers un dépôt distant
- Adopter le Semantic Versioning (SemVer)
Tags légers vs annotés
Section intitulée « Tags légers vs annotés »Git propose deux types de tags :
| Type | Contenu | Usage |
|---|---|---|
| Tag léger | Pointeur simple vers un commit (comme un signet) | Marquage temporaire, usage local |
| Tag annoté | Objet Git complet : auteur, date, message, signable GPG | Recommandé pour les releases |
Créer un tag annoté
Section intitulée « Créer un tag annoté »C’est la forme recommandée pour les releases :
git tag -a v1.0.0 -m "Première version stable"-a: créer un tag annoté-m: le message associé (comme pour un commit)
Vérification :
git show v1.0.0Sortie attendue :
tag v1.0.0Tagger: Stéphane ROBERT <stephane@example.com>Date: Fri Mar 28 14:30:00 2026 +0100
Première version stable
commit 3f7a2b1c8e9d4f5a6b7c8d9e0f1a2b3c4d5e6f7a (HEAD -> main, tag: v1.0.0)Author: Stéphane ROBERT <stephane@example.com>Date: Fri Mar 28 14:30:00 2026 +0100
Ajout de la page de contactLe tag annoté stocke le nom du tagger, la date et le message en plus de pointer vers le commit.
Créer un tag léger
Section intitulée « Créer un tag léger »Pour un marquage rapide sans métadonnées :
git tag v1.0.0-betaPas de -a, pas de -m. Le tag pointe simplement vers le commit
courant, sans information supplémentaire.
Tagger un commit passé
Section intitulée « Tagger un commit passé »Vous avez oublié de tagger au moment du commit ? Pas de problème :
git log --oneline -53f7a2b1 Ajout de la page de contacta1b2c3d Correction du bug d'affichage9c8d7e6 Refactoring du CSSf5e4d3c Ajout de la page d'accueil1a2b3c4 Initial commitTaggez un commit spécifique :
git tag -a v0.9.0 -m "Version beta" a1b2c3dLister les tags
Section intitulée « Lister les tags »git tagSortie attendue :
v0.9.0v1.0.0v1.0.0-betaFiltrer par pattern :
git tag -l "v1.*"v1.0.0v1.0.0-betaPour voir les tags avec leurs messages :
git tag -nv0.9.0 Version betav1.0.0 Première version stablev1.0.0-beta (pas de message — tag léger)Pousser les tags vers un remote
Section intitulée « Pousser les tags vers un remote »Par défaut, git push ne pousse pas les tags. Il faut le faire
explicitement.
Pousser un tag spécifique
Section intitulée « Pousser un tag spécifique »git push origin v1.0.0Pousser tous les tags
Section intitulée « Pousser tous les tags »git push origin --tagsSupprimer un tag
Section intitulée « Supprimer un tag »Supprimer un tag local
Section intitulée « Supprimer un tag local »git tag -d v1.0.0-betaSupprimer un tag distant
Section intitulée « Supprimer un tag distant »git push origin --delete v1.0.0-betaOu avec la syntaxe refspec :
git push origin :refs/tags/v1.0.0-betaSemantic Versioning (SemVer)
Section intitulée « Semantic Versioning (SemVer) »La convention de nommage la plus répandue pour les tags :
vMAJEUR.MINEUR.PATCH| Composant | Quand l’incrémenter | Exemple |
|---|---|---|
| MAJEUR | Changement incompatible (breaking change) | v1.0.0 → v2.0.0 |
| MINEUR | Nouvelle fonctionnalité rétrocompatible | v1.0.0 → v1.1.0 |
| PATCH | Correction de bug rétrocompatible | v1.0.0 → v1.0.1 |
Exemples concrets
Section intitulée « Exemples concrets »v0.1.0 → Première version utilisable (pas encore stable)v0.2.0 → Ajout d'une fonctionnalitév0.2.1 → Correction d'un bugv1.0.0 → Première release stable (API publique figée)v1.1.0 → Nouvelle fonctionnalité rétrocompatiblev2.0.0 → Breaking change (migration requise)Suffixes courants
Section intitulée « Suffixes courants »v1.0.0-alpha → Version très préliminairev1.0.0-beta → Version de testv1.0.0-rc.1 → Release Candidate 1v1.0.0 → Version stableWorkflow complet : tagger une release
Section intitulée « Workflow complet : tagger une release »-
Vérifiez que tout est propre
Fenêtre de terminal git statusgit log --oneline -5 -
Créez le tag annoté
Fenêtre de terminal git tag -a v1.2.0 -m "Ajout de l'authentification OAuth" -
Poussez le tag
Fenêtre de terminal git push origin v1.2.0 -
Vérifiez sur le remote
Fenêtre de terminal git ls-remote --tags origin
Dépannage : problèmes courants
Section intitulée « Dépannage : problèmes courants »| Symptôme | Cause probable | Solution |
|---|---|---|
error: tag 'v1.0.0' already exists | Un tag avec ce nom existe déjà | Supprimez-le d’abord (git tag -d v1.0.0) ou utilisez un autre nom |
| Les tags n’apparaissent pas sur GitHub/GitLab | Tags non poussés | git push origin --tags |
git describe affiche un résultat inattendu | Pas de tag annoté dans l’historique | git describe cherche les tags annotés par défaut. Utilisez --tags pour inclure les légers |
| Tag sur le mauvais commit | Le tag pointe vers HEAD au moment de la création | Supprimez-le et recréez-le sur le bon commit : git tag -a v1.0.0 SHA |
Quel tag utiliser ?
Section intitulée « Quel tag utiliser ? »| Situation | Tag recommandé | Commande |
|---|---|---|
| Release publique (v1.0.0, v2.3.1…) | Annoté | git tag -a v1.0.0 -m "..." |
| Marquer un point de repère temporaire | Léger | git tag wip-avant-refacto |
| Tag qui sera poussé et visible sur GitHub/GitLab | Annoté | git tag -a |
| Tag local uniquement, jamais poussé | Léger | git tag |
| Release avec signature GPG | Annoté + signé | git tag -s v1.0.0 -m "..." |
En pratique : utilisez toujours le tag annoté sauf pour les repères temporaires.
git describe et les plateformes comme GitHub reconnaissent les tags annotés
en priorité pour les releases.
À retenir
Section intitulée « À retenir »- Tags annotés (
git tag -a) sont recommandés pour les releases : ils contiennent auteur, date et message - Tags légers sont de simples pointeurs — pour un usage temporaire
git pushne pousse pas les tags automatiquement — utilisezgit push origin --tagsou--follow-tags- Semantic Versioning (MAJEUR.MINEUR.PATCH) est la convention standard
- Utilisez
git tag -den local etgit push --deletepour le remote