Petit exercice pratique...
checkout) et définitivement (reset).mkdir projet-tags
cd projet-tags
git init
Crée un premier fichier :
echo "Version 1 : Base du projet" > fichier.txt
git add .
git commit -m "Commit 1 - Base du projet"
Ajoute une deuxième version :
echo "Version 2 : Ajout d'une fonctionnalité" >> fichier.txt
git commit -am "Commit 2 - Nouvelle fonctionnalité"
Ajoute une troisième version :
echo "Version 3 : Correction d’un bug" >> fichier.txt
git commit -am "Commit 3 - Correction"
Affiche les commits sous forme compacte :
git log --oneline
👉 Note les 3 identifiants (hash) des commits.
Reviens sur le premier commit :
git checkout <hash_du_commit1>
👉 Vérifie le contenu du fichier : il doit contenir uniquement "Version 1 : Base du projet".
Puis reviens sur la branche principale :
git checkout main
Crée un tag v1.0 sur le premier commit :
git tag v1.0 <hash_du_commit1>
Crée un tag v2.0 sur le deuxième commit :
git tag v2.0 <hash_du_commit2>
Crée un tag v3.0 sur le troisième commit (le plus récent) :
git tag v3.0
👉 Vérifie la liste :
git tag
Teste la navigation avec checkout :
git checkout v1.0
cat fichier.txt
👉 Le fichier doit montrer la Version 1.
Puis :
git checkout v3.0
cat fichier.txt
👉 Tu retrouves la Version 3.
checkout <hash> et checkout v1.0 ?checkout sur un ancien commit ?v1.0, v2.0 au lieu de retenir les hash ?👉 Cet exercice permet de manipuler l’historique, de comprendre le mode "lecture seule" (detached HEAD), et de voir l’intérêt des tags pour marquer des versions stables.
checkout & tagfichier.txt (Versions 1, 2, 3).Commande
git log --oneline
Attendu (exemple, les hash varient)
a3f9c1d Commit 3 - Correction
7b2e4a9 Commit 2 - Nouvelle fonctionnalité
c18d0f3 Commit 1 - Base du projet
C3, C2, C1 (abréviations).checkout temporaire sur un ancien commitCommande
git checkout C1
Observation
main, mais sur un commit précis.Vérification
type fichier.txt # (Windows)
# ou
cat fichier.txt # (macOS/Linux)
Attendu
Version 1 : Base du projet
Revenir sur la branche
git checkout main
Attendu
main.git tag v1.0 C1
git tag v2.0 C2
git tag v3.0
git tag
Attendu
v1.0
v2.0
v3.0
Aller au tag v1.0
git checkout v1.0
cat fichier.txt
Attendu
Version 1 : Base du projet
Remarque : encore detached HEAD (normal quand on checkout un tag).
Aller au tag v3.0
git checkout v3.0
cat fichier.txt
Attendu
Version 1 : Base du projet
Version 2 : Ajout d'une fonctionnalité
Version 3 : Correction d’un bug
Revenir travailler normalement
git checkout main
Q1. Différence entre checkout <hash> et checkout v1.0 ?
Q2. Que se passe-t-il si tu modifies/supprimes un fichier après un checkout sur un ancien commit (detached HEAD) ?
Tu peux modifier et committer, mais tu n’es sur aucune branche.
Si tu veux conserver ce travail, crée une branche depuis là :
git switch -c correction-rapide
Q3. Pourquoi taguer (v1.0, v2.0) plutôt que mémoriser des hash ?
Les tags :
v1.0 > a3f9c1d),Un tag spécifique
git push origin v1.0
Tous les tags
git push --tags
Oubli : rester en detached HEAD
Symptôme : “Pourquoi je ne vois pas ma branche ?”
→ Revenir sur main avec git checkout main.
Tag égaré
Si git tag ne montre pas le tag : vérifier l’orthographe, la position (commit visé), ou refaire :
git tag -d v1.0
git tag v1.0 C1
Confusion reset/checkout
checkout = navigation (temporaire).reset --hard = réécriture de l’historique de la branche (destructif).--oneline.v1.0, v2.0, v3.0 et je peux les lister.checkout un tag et vérifier le contenu du fichier.main pour continuer à travailler.