Exercice 03 : Mettre du travail en attente avec git stash
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Mettre de côté des modifications avec
git stash - ✅ Lister, inspecter et restaurer des stashs
- ✅ Nommer un stash pour le retrouver facilement
- ✅ Transférer du travail d'une branche à une autre via stash
Durée estimée : 15 minutes | Difficulté : ⭐⭐⭐☆☆
📖 Contexte
Vous travaillez sur une fonctionnalité quand votre chef vous demande de corriger un bug urgent sur main. Vous n'êtes pas prêt à committer votre travail en cours. git stash est la solution : il sauvegarde vos modifications dans une pile temporaire et nettoie votre working directory.
C'est une commande du quotidien pour tout développeur qui jongle entre plusieurs tâches.
📋 Énoncé
Vous avez un repository git-intermediaire-tp. Vous allez simuler plusieurs scénarios de stash : interruption urgente, stash nommé, et transfert de travail entre branches.
🧭 Déroulement
Tâche 1 : Stasher des modifications en cours
Sur la branche main, modifiez README.md sans committer. Imaginez qu'un bug urgent arrive. Stashez vos modifications, vérifiez que le working directory est propre, puis restaurez-les.
Indice :
git stashsauvegarde les fichiers trackés modifiés et les fichiers en staging.git stash poprestaure le dernier stash ET le supprime de la pile.git stash applyrestaure SANS supprimer.
Vérification : Après git stash, git status affiche "nothing to commit". Après git stash pop, vos modifications sont de retour.
Tâche 2 : Créer plusieurs stashs avec des messages
Faites deux séries de modifications distinctes sur deux fichiers différents, en stashant chacune avec un message descriptif. Listez les stashs disponibles.
Indice :
git stash push -m "message descriptif"nomme le stash.git stash listaffiche tous les stashs avec leur index (stash@{0},stash@{1}...).
Vérification : git stash list affiche deux entrées avec vos messages.
Tâche 3 : Inspecter et appliquer un stash spécifique
Sans restaurer dans l'ordre, appliquez uniquement le stash le plus ancien (pas le dernier). Inspectez son contenu avant de l'appliquer.
Indice :
git stash show stash@{1}affiche les fichiers modifiés.git stash show -p stash@{1}affiche le diff complet.git stash apply stash@{1}applique un stash spécifique.
Vérification : Les modifications du stash ciblé sont restaurées. git stash list montre que ce stash existe encore.
Tâche 4 : Supprimer des stashs
Supprimez le stash que vous venez d'appliquer (il n'est plus utile). Puis videz entièrement la pile de stashs.
Indice :
git stash drop stash@{N}supprime un stash précis.git stash clearsupprime TOUS les stashs en une commande - attention, c'est irréversible.
Vérification : git stash list ne retourne rien.
Tâche 5 : Transférer du travail vers une autre branche
Commencez à éditer un fichier sur main, réalisez que vous auriez dû être sur feature/experiment. Stashez, changez de branche, et appliquez le stash.
Indice : Stashez d'abord, puis
git checkout feature/experiment(ougit switch). Si la branche n'existe pas :git checkout -b feature/experiment. Ensuitegit stash pop.
Vérification : Vos modifications sont présentes sur feature/experiment et absentes de main.
🗂️ Mini-Projet
# Stash simple
git stash # sauvegarder le travail en cours
git stash pop # restaurer + supprimer de la pile
# Stash nommé
git stash push -m "wip: refactor auth"
git stash list # voir tous les stashs
# Inspecter avant d'appliquer
git stash show -p stash@{1}
git stash apply stash@{1}
# Nettoyer
git stash drop stash@{0}
git stash clear # vider toute la pile
# Transfert entre branches
git stash
git checkout -b feature/experiment
git stash popCheckpoints :
git stashnettoie le working directorygit stash listaffiche plusieurs stashs nommés- Un stash spécifique est appliqué via
stash@{N} - Le travail est transféré de
mainversfeature/experiment