🔝 Retour au Sommaire
Imaginez que vous êtes en train de travailler sur une nouvelle fonctionnalité dans votre projet. Vous avez modifié plusieurs fichiers, mais soudain, votre collègue vous demande de corriger un bug urgent sur la branche principale. Problème : vos modifications ne sont pas prêtes à être commitées, et vous ne voulez pas les perdre.
C'est exactement dans ce genre de situation que git stash devient votre meilleur ami !
Git stash vous permet de mettre de côté temporairement vos modifications non commitées (dans le Working Directory et la Staging Area) pour revenir à un état propre de votre branche. Vous pouvez ensuite changer de branche, faire votre correction urgente, et récupérer vos modifications exactement là où vous les aviez laissées.
- Changer de branche rapidement sans avoir à commiter un travail incomplet
- Tester quelque chose sans perdre vos modifications en cours
- Éviter les conflits lors d'un
git pull - Garder un historique propre en évitant les commits temporaires du type "WIP" ou "sauvegarde"
git stashou (forme plus explicite) :
git stash pushCette commande prend toutes vos modifications suivies (fichiers déjà trackés par Git) et les met de côté dans une zone temporaire. Votre répertoire de travail redevient propre, comme après le dernier commit.
Exemple concret :
# Vous êtes sur la branche feature/nouveau-design
# Vous avez modifié style.css et index.html
git status
# modified: style.css
# modified: index.html
git stash
# Saved working directory and index state WIP on feature/nouveau-design
git status
# nothing to commit, working tree cleangit stash popCette commande réapplique la dernière modification mise de côté ET la supprime de la liste des stash.
Scénario typique :
# Vous avez mis vos modifications de côté
git stash
# Vous changez de branche pour corriger un bug
git checkout main
# ... corrections et commit ...
# Vous revenez sur votre branche
git checkout feature/nouveau-design
# Vous récupérez vos modifications
git stash pop
# Les fichiers style.css et index.html sont de nouveau modifiésgit stash applyIdentique à git stash pop, MAIS garde la copie dans la liste des stash. Utile si vous voulez appliquer les mêmes modifications sur plusieurs branches.
Vous pouvez créer plusieurs stash successifs. Ils sont empilés comme une pile d'assiettes.
git stash listExemple de sortie :
stash@{0}: WIP on feature/login: a3f5d8e Ajout formulaire
stash@{1}: WIP on feature/design: 2b8c4fa Modification CSS
stash@{2}: WIP on main: 9e1f3bc Correctif urgent
Le stash le plus récent est stash@{0}.
git stash apply stash@{1}ou
git stash pop stash@{1}Pour vous y retrouver plus facilement, donnez un nom à votre stash :
git stash push -m "Travail en cours sur le menu responsive"Résultat dans git stash list :
stash@{0}: On feature/menu: Travail en cours sur le menu responsive
Beaucoup plus clair que "WIP" !
Par défaut, git stash ne sauvegarde que les fichiers déjà trackés par Git. Pour inclure également les fichiers non suivis (nouveaux fichiers) :
git stash -uou
git stash --include-untrackedExemple :
# Vous avez créé un nouveau fichier nouveau.js (non tracké)
git status
# Untracked files:
# nouveau.js
git stash -u
# Saved working directory and index state WIP on feature/test
# Le fichier nouveau.js a également été mis de côtéPour voir ce qui a été sauvegardé dans un stash sans l'appliquer :
git stash showPour voir les modifications détaillées (comme un diff) :
git stash show -pou
git stash show -p stash@{1}git stash dropgit stash drop stash@{1}git stash clearParfois, vous voulez transformer votre stash en une nouvelle branche pour mieux organiser votre travail :
git stash branch nom-de-la-brancheCette commande :
- Crée une nouvelle branche
- Change vers cette branche
- Applique le stash
- Supprime le stash
Exemple :
git stash branch feature/correctif-menu
# Switched to a new branch 'feature/correctif-menu'
# On branch feature/correctif-menu
# Changes not staged for commit:
# modified: menu.js# Vous travaillez sur feature/nouvelle-page
git add .
git stash -m "Page de contact en cours"
# Correction urgente sur main
git checkout main
# ... correctifs ...
git add .
git commit -m "Fix: correction bug critique"
git push
# Retour au travail
git checkout feature/nouvelle-page
git stash pop# Vous avez des modifications locales
git stash
# Récupérer les dernières modifications
git pull origin main
# Réappliquer vos modifications
git stash pop# Vous voulez tester une idée sans perdre votre travail actuel
git stash -m "Travail actuel avant test"
# ... faites vos tests ...
# Revenez en arrière
git stash popParfois, quand vous faites git stash pop, Git peut rencontrer des conflits (si les fichiers ont été modifiés entre temps). Dans ce cas :
- Git vous indique les fichiers en conflit
- Résolvez les conflits manuellement (comme pour un merge)
- Ajoutez les fichiers résolus avec
git add - Le stash reste dans la liste (il ne se supprime pas automatiquement en cas de conflit)
- Une fois résolu, supprimez-le manuellement avec
git stash drop
Exemple :
git stash pop
# Auto-merging index.html
# CONFLICT (content): Merge conflict in index.html
# Résoudre le conflit dans index.html
# Ensuite :
git add index.html
git stash drop| Commande | Description |
|---|---|
git stash |
Met de côté les modifications |
git stash push -m "message" |
Met de côté avec un message descriptif |
git stash -u |
Met de côté (y compris les fichiers non suivis) |
git stash list |
Liste tous les stash |
git stash show |
Affiche le contenu du dernier stash |
git stash show -p |
Affiche les différences détaillées |
git stash pop |
Applique et supprime le dernier stash |
git stash apply |
Applique sans supprimer le stash |
git stash drop |
Supprime le dernier stash |
git stash clear |
Supprime tous les stash |
git stash branch nom |
Crée une branche avec le stash |
✅ Donnez toujours un message descriptif avec -m pour vous y retrouver facilement
✅ N'oubliez pas d'appliquer vos stash : ils ne sont pas éternels et peuvent être confus si vous en accumulez trop
✅ Utilisez git stash pop plutôt que apply pour garder votre liste de stash propre
✅ Vérifiez avec git stash list régulièrement pour ne pas laisser traîner des modifications oubliées
❌ N'utilisez pas git stash comme système de sauvegarde : préférez les commits sur des branches dédiées pour du travail important
❌ Évitez d'accumuler trop de stash : au-delà de 3-4, il devient difficile de s'y retrouver
Git stash est un outil puissant et pratique pour gérer vos modifications temporaires sans polluer votre historique de commits. C'est particulièrement utile dans le travail quotidien où les interruptions et les changements de contexte sont fréquents.
Retenez l'essentiel :
git stashpour mettre de côtégit stash poppour récupérergit stash listpour voir ce qui est stocké
Avec ces trois commandes, vous couvrez déjà 90% des cas d'usage !
Prochaine étape : Module 6.2 - Cherry-pick : appliquer des commits spécifiques