Branches de version et étiquettes
- Leçon 13
- 30 min
- Module 5 : Mises en production et correctifs urgents
Leçon 13 sur 15 · L'essentiel de Git et du développement en équipeBranches de version et étiquettes
1. Comprendre un dépôt
2. Travailler avec les branches et les dépôts distants
3. Collaborer par la revue de code
4. Résoudre et récupérer
5. Mises en production et correctifs urgents
Ce que vous saurez faire
Donnez au service de soutien une version des notes qui reste fixe pendant que votre équipe continue de travailler. Après cette leçon, vous pourrez dire quelle référence contient le nouveau travail, la prochaine version et la version publiée.
Avant de commencerCe qu’il faut savoir et avoir sous la main
Ce que vous devez savoir
- Comment fusionner une demande de tirage (pull request) et lire le commit (enregistrement des changements) de fusion dans
git log --graph, expliqué dans Les étapes d’une demande de tirage : 8. Fusionner. - Comment pousser une branche et définir sa branche de suivi, expliqué dans Synchroniser de façon réfléchie : Amira pousse ses commits.
Ce qu’il vous faut sur votre ordinateur
- Le dossier
~/projects/nextia-learning-labs. Vous l’avez cloné dans Les étapes d’une demande de tirage : préparer le laboratoire d’exercice. S’il manque, faites l’étape 2 de cette section. - Git, avec votre nom et votre adresse courriel, configuré dans Configurer Git : Étape 2 : indiquer votre identité à Git. Git les inscrit dans chaque étiquette que vous créez.
- Cette leçon utilise un nouvel état d’exercice, appelé
release. Vous le créez dans Préparer l’état d’exercice. La commande de préparation supprime votre ancien dossierc14-labet le recrée. Vous n’avez pas besoin de votre travail du module 4. - Les empreintes des commits créés par le script de préparation sont les mêmes que dans cette leçon. Les commits que vous créez vous-même ont des empreintes différentes.
L’équipe publie une version
Section intitulée « L’équipe publie une version »L’équipe rédige les notes du service de soutien dans ticket-notes. Jusqu’ici, tout le travail allait dans main. Maintenant, le service de soutien veut une version fixe qu’il peut utiliser chaque jour. Il l’appelle version 1.0.
main ne peut pas être cette version. L’équipe fait des commits sur main chaque jour, donc main change chaque jour. Le service de soutien a besoin de notes qui changent seulement quand l’équipe décide de corriger quelque chose.
L’équipe utilise donc trois références. Une référence est un nom qui pointe vers un commit, par exemple un nom de branche.
| Référence | Exemple | Ce qu’elle contient | Est-ce qu’elle bouge? |
|---|---|---|---|
| Développement | main |
Le nouveau travail. Tous les changements terminés vont ici. | Oui, à chaque changement fusionné. |
| Version candidate | release/1.0 |
La prochaine version. L’équipe la teste. | Seulement pour des corrections. |
| Production | v1.0.0 |
La version utilisée par le service de soutien. | Jamais. |
Une branche de version est une branche que vous créez à partir de main quand la prochaine version est prête. C’est la version candidate : celle que l’équipe teste avant de la remettre au service de soutien. Après sa création, elle accepte seulement des corrections. Le nouveau travail continue sur main et fera partie de la prochaine version.
Une étiquette est un nom fixe pour un commit. Une branche bouge quand vous faites un commit dessus. Une étiquette ne bouge jamais. Quand l’équipe publie la version 1.0, elle place l’étiquette v1.0.0 sur le commit de publication. La « production » désigne ce que les utilisateurs ont maintenant. L’étiquette marque donc la production.
Numéros de version
Section intitulée « Numéros de version »La plupart des équipes écrivent les versions avec trois nombres : MAJEURE.MINEURE.CORRECTIF.
| Changement | Exemple | Quand |
|---|---|---|
| CORRECTIF | 1.0.0 → 1.0.1 |
Une correction seulement. Rien de nouveau. |
| MINEURE | 1.0.1 → 1.1.0 |
Du nouveau contenu qui ne change pas la façon d’utiliser les notes. |
| MAJEURE | 1.1.0 → 2.0.0 |
Un changement que les gens doivent apprendre, par exemple une nouvelle organisation des fichiers. |
Le v au début de v1.0.0 est une convention courante pour les noms d’étiquettes. La branche de version a seulement les deux premiers nombres, release/1.0, car toutes les corrections 1.0.x y vont.
Préparer l’état d’exercice
Section intitulée « Préparer l’état d’exercice »-
Allez dans votre dossier de projets et exécutez le script de préparation avec le scénario
release:Terminal cd ~/projectssh nextia-learning-labs/C14/setup.sh release --resetSortie Ready: /Users/amira/projects/c14-labticket-notes your clonesam-notes Sam's cloneteam-remote.git the shared remoteNext: cd c14-lab/ticket-notesTo start this scenario again: sh nextia-learning-labs/C14/setup.sh release --reset -
Allez dans votre clone et examinez l’historique :
Terminal cd c14-lab/ticket-notesgit log --oneline -3Sortie 465d7ea (HEAD -> main, origin/main, origin/HEAD) Add escalation rulesf330fdc Add ticket 104e058b3f Add ticket 103Si vos empreintes sont différentes, exécutez de nouveau la commande de préparation. Ne continuez pas avec des empreintes différentes.
Exemple détaillé : Amira publie la version 1.0
Section intitulée « Exemple détaillé : Amira publie la version 1.0 »L’équipe convient que main, au commit 465d7ea, est prêt à devenir la version 1.0.
Créer la branche de version
Section intitulée « Créer la branche de version »Branche actuelle : main. Amira lance d’abord la vérification, car une version doit la réussir :
sh check.shPASS: 4 ticket lines checkedElle crée la branche de version à partir de main et la pousse pour que l’équipe puisse la voir :
git switch -c release/1.0git push -u origin release/1.0Switched to a new branch 'release/1.0'To /Users/amira/projects/c14-lab/team-remote.git * [new branch] release/1.0 -> release/1.0branch 'release/1.0' set up to track 'origin/release/1.0'.Branche actuelle : maintenant release/1.0. Le / dans le nom fait simplement partie du nom. Les équipes utilisent release/ pour regrouper toutes les branches de version dans les listes.
Étiqueter la version
Section intitulée « Étiqueter la version »L’équipe a testé la version candidate et n’a trouvé aucun problème. Amira étiquette le commit comme version 1.0.0. L’option -a crée une étiquette annotée : elle conserve aussi son auteur, sa date de création et un message.
git tag -a v1.0.0 -m "Help desk notes 1.0"git tagv1.0.0Sans nom, git tag liste toutes les étiquettes. Pour voir vers quoi pointe une étiquette, utilisez git show :
git show v1.0.0tag v1.0.0Tagger: Amira Khan <amira@example.com>Date: Mon Oct 5 22:03:44 2026 -0400
Help desk notes 1.0
commit 465d7ea589a41feac19db85754dd27d487d78f76Author: Amira Khan <amira@example.com>Date: Tue Oct 6 09:09:00 2026 -0400
Add escalation rules
diff --git a/escalation.txt b/escalation.txt...La première partie est l’étiquette : son auteur, sa date de création et le message. La deuxième partie est le commit vers lequel pointe l’étiquette, 465d7ea.
Pousser l’étiquette
Section intitulée « Pousser l’étiquette »git push n’envoie pas les étiquettes. Amira le vérifie :
git pushEverything up-to-dateL’étiquette se trouve encore seulement dans son dépôt. Elle la pousse par son nom :
git push origin v1.0.0To /Users/amira/projects/c14-lab/team-remote.git * [new tag] v1.0.0 -> v1.0.0Sam peut maintenant la récupérer. Dans sam-notes, une récupération montre la nouvelle branche et la nouvelle étiquette :
git fetchgit tagFrom /Users/amira/projects/c14-lab/team-remote * [new branch] release/1.0 -> origin/release/1.0 * [new tag] v1.0.0 -> v1.0.0v1.0.0main continue, la version ne bouge pas
Section intitulée « main continue, la version ne bouge pas »Branche actuelle : main. Amira y revient avec git switch main. Elle commence une nouvelle fonctionnalité : l’exportation des billets. Elle crée export.txt :
Export format: one CSV row for each ticket.TODO: decide the columns.L’exportation n’est pas terminée, mais elle fait un commit et pousse son travail sur main :
git add export.txtgit commit -m "Start the ticket export (not finished)"git push[main eaa41a2] Start the ticket export (not finished) 1 file changed, 2 insertions(+) create mode 100644 export.txtTo /Users/amira/projects/c14-lab/team-remote.git 465d7ea..eaa41a2 main -> mainElle examine maintenant toutes les références. --decorate affiche les noms des branches et des étiquettes à côté des commits :
git log --oneline --graph --all --decorate* eaa41a2 (HEAD -> main, origin/main, origin/HEAD) Start the ticket export (not finished)* 465d7ea (tag: v1.0.0, origin/release/1.0, release/1.0) Add escalation rules* f330fdc Add ticket 104Lisez à partir du haut :
maina avancé jusqu’àeaa41a2. Le développement continue.release/1.0est restée sur465d7ea. L’exportation inachevée ne fait pas partie de la version candidate.v1.0.0est restée sur465d7ea. Le service de soutien a encore exactement la version 1.0.
La branche de version peut encore bouger. Si le service de soutien trouve un bogue dans la version 1.0, une correction va sur release/1.0. L’équipe crée ensuite l’étiquette v1.0.1. La prochaine leçon montre comment faire. L’étiquette v1.0.0 ne bouge jamais. Elle désigne toujours la première version reçue par le service de soutien.
Exercice guidé : publier la version 1.0
Section intitulée « Exercice guidé : publier la version 1.0 »-
Exécutez la commande de préparation de Préparer l’état d’exercice, puis allez dans
c14-lab/ticket-notes. -
Exécutez
git status. La sortie doit inclureOn branch main(sur la branche main) etworking tree clean(arbre de travail propre). -
Exécutez
sh check.sh. La sortie doit commencer parPASS(réussite). -
Créez la branche de version et poussez-la :
Terminal git switch -c release/1.0git push -u origin release/1.0Branche actuelle : maintenant
release/1.0. La sortie inclut* [new branch] release/1.0 -> release/1.0(nouvelle branche). -
Étiquetez la version :
Terminal git tag -a v1.0.0 -m "Help desk notes 1.0" -
Exécutez
git show v1.0.0. Vérifiez que la ligne du commit affiche465d7ea. -
Poussez l’étiquette :
Terminal git push origin v1.0.0La sortie inclut
* [new tag] v1.0.0 -> v1.0.0(nouvelle étiquette). -
Passez à
main:Terminal git switch main -
Dans votre éditeur, créez
export.txtavec les deux lignes de l’exemple détaillé. Enregistrez-le. -
Faites un commit et poussez-le sur
main:Terminal git add export.txtgit commit -m "Start the ticket export (not finished)"git push -
Exécutez
git log --oneline --graph --all --decorate. Vérifiez trois choses :mainpointe vers votre nouveau commit.release/1.0pointe vers465d7ea.tag: v1.0.0(étiquette : v1.0.0) pointe vers465d7ea.
-
Allez dans le clone de Sam et vérifiez qu’il peut voir l’étiquette :
Terminal cd ../sam-notesgit fetchgit tagLa sortie se termine par
v1.0.0. Revenez ensuite aveccd ../ticket-notes.
À vous de jouer : publier la version 1.1
Section intitulée « À vous de jouer : publier la version 1.1 »L’exportation est maintenant terminée. L’équipe veut la publier comme version 1.1.
- Sur
main, complétezexport.txt. Par exemple, remplacez la ligneTODO(à faire) parColumns: number, summary, action.(colonnes : numéro, résumé, action). Créez un commit (enregistrement des modifications) et poussez-le. - Créez la version candidate 1.1, ajoutez l’étiquette de la version publiée 1.1.0, puis poussez la branche et l’étiquette. Choisissez vous-même les noms selon les règles de cette leçon.
- Prouvez trois choses avec des commandes :
release/1.0etv1.0.0n’ont pas bougé.- La version 1.0.0 ne contient pas
export.txt. - La version 1.1.0 contient
export.txt.
Afficher une réponse modèle
Les noms sont release/1.1 (une nouvelle version MINOR, avec du nouveau contenu) et v1.1.0.
git switch maingit commit -am "Finish the ticket export"git pushgit switch -c release/1.1git tag -a v1.1.0 -m "Help desk notes 1.1"git push -u origin release/1.1git push origin v1.1.0git log --oneline --graph --all --decorate -5* 5cddf4e (HEAD -> release/1.1, tag: v1.1.0, origin/release/1.1, origin/main, origin/HEAD, main) Finish the ticket export* eaa41a2 Start the ticket export (not finished)* 465d7ea (tag: v1.0.0, origin/release/1.0, release/1.0) Add escalation rules* f330fdc Add ticket 104* e058b3f Add ticket 103release/1.0 et v1.0.0 pointent toujours vers 465d7ea. Pour voir les fichiers de chaque version, affichez la liste des fichiers associés à l’étiquette :
git ls-tree --name-only v1.0.0.gitignoreREADME.mdcheck.shcontacts.txtescalation.txttickets.txtexport.txt ne figure pas dans la liste. La même commande avec v1.1.0 affiche aussi export.txt.
Vos valeurs de hachage pour 5cddf4e et eaa41a2 sont différentes, car vous avez créé ces commits vous-même.
Erreur courante
J'ai créé l'étiquette, mais Sam ne la voit pas
Symptôme : vous avez créé v1.0.0 et exécuté git push. Sam exécute git fetch, puis git tag, et ne voit rien :
From /Users/amira/projects/c14-lab/team-remote * [new branch] release/1.0 -> origin/release/1.0Cause : git push envoie les branches, pas les étiquettes. L’étiquette existe seulement dans votre dépôt.
Solution :
-
Vérifiez quelles étiquettes se trouvent dans le dépôt distant :
Terminal git ls-remote --tags originSi la sortie est vide, le dépôt distant n’a aucune étiquette.
-
Poussez l’étiquette en précisant son nom :
git push origin v1.0.0. -
Demandez à Sam d’exécuter
git fetchde nouveau. La sortie affiche* [new tag](nouvelle étiquette).
Après l’envoi, git ls-remote --tags origin affiche deux lignes pour l’étiquette. La ligne qui se termine par ^{} indique le commit :
2131d28c763e2fbb027721bef294f9f7bf1e405b refs/tags/v1.0.0465d7ea589a41feac19db85754dd27d487d78f76 refs/tags/v1.0.0^{}Erreur courante
J'ai ajouté l'étiquette au mauvais commit
Symptôme : vous vouliez ajouter une étiquette à la version publiée, mais vous étiez sur main. git log --oneline --decorate -2 montre l’étiquette sur le travail inachevé :
eaa41a2 (HEAD -> main, tag: v1.0.1, origin/main, origin/HEAD) Start the ticket export (not finished)465d7ea (tag: v1.0.0, origin/release/1.0, release/1.0) Add escalation rulesCause : git tag ajoute une étiquette au commit vers lequel HEAD pointe, sauf si vous précisez un commit. Vous étiez sur la mauvaise branche.
Solution : si vous n’avez pas poussé l’étiquette, supprimez-la et ajoutez une étiquette au bon commit :
-
Supprimez l’étiquette locale :
Terminal git tag -d v1.0.1Sortie Deleted tag 'v1.0.1' (was edbb130)edbb130est l’étiquette elle-même, pas un commit. -
Passez à la bonne branche, par exemple avec
git switch release/1.0. -
Créez de nouveau l’étiquette avec
git tag -a.
Si vous tentez de créer une étiquette avec un nom existant, Git refuse. Par exemple, git tag -a v1.0.0 -m "x" affiche fatal: tag 'v1.0.0' already exists (erreur fatale : l’étiquette « v1.0.0 » existe déjà).
Vérifiez votre compréhension
Faites une prédiction : Sam fusionne trois autres demandes de tirage dans main. Parmi main, release/1.0 et v1.0.0, lesquels bougent?
Afficher la réponse
Seule main bouge. Les demandes de tirage (pull requests) ciblent main, donc seule main reçoit les nouveaux commits. release/1.0 bouge seulement quand quelqu’un y fusionne une correction. v1.0.0 ne bouge jamais, donc le service d’assistance conserve exactement la version 1.0.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Vérifiez votre compréhension
Vérification pratique : montrez vers quel commit chaque référence pointe et prouvez que l'étiquette se trouve dans le dépôt distant.
Afficher la réponse
Exécutez git log --oneline --graph --all --decorate. Chaque commit affiche les noms de ses branches et étiquettes, par exemple (tag: v1.0.0, origin/release/1.0, release/1.0). Ensuite, exécutez git ls-remote --tags origin. Si la sortie contient refs/tags/v1.0.0, le dépôt distant contient l’étiquette.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Récapitulatif
mainsert au développement. Elle bouge à chaque modification fusionnée.- Une branche de publication, par exemple
release/1.0, représente la version candidate. Vous la créez à partir demain, et elle accepte seulement les corrections. - Une étiquette, par exemple
v1.0.0, marque la version publiée. Elle ne bouge jamais. Utilisezgit tag -apour les versions publiées. git pushn’envoie pas les étiquettes. Poussez chaque étiquette avecgit push origin <tag>.- Les versions utilisent MAJOR.MINOR.PATCH. Une correction change seulement le numéro PATCH.
Leçon suivante : Appliquer un correctif avec cherry-pick