Cours
Vous êtes en plein développement d’une nouvelle fonctionnalité dans votre pipeline de données lorsqu’un bug critique tombe. Votre répertoire de travail contient des modifications à moitié terminées. Vous n’êtes pas prêt à valider, mais vous devez changer de branche immédiatement.
Dans ce tutoriel, je vous montre comment utiliser toute la suite de commandes git stash. Vous apprendrez à enregistrer, inspecter, restaurer, stasher de manière sélective et nettoyer vos stashes dans Git. Pour aller plus loin, je vous recommande notre cours Introduction to GitHub Concepts pour approfondir le contrôle de version et le travail avec des dépôts sur GitHub.
Apprenez les bases de Git dès aujourd'hui
Qu’est-ce que Git stash ?
git stash est une commande Git qui met temporairement de côté vos modifications non validées afin de retrouver un répertoire de travail propre, sans créer de commit Git. Idéal pour changer de branche ou traiter une urgence sans perdre votre avancement.
Les stashes sont stockés dans une pile LIFO (dernier entré, premier sorti). Le plus récent est toujours stash@{0}, suivi de stash@{1}, etc.
Par défaut, git stash enregistre les fichiers suivis modifiés et les changements indexés (depuis l’index). En revanche, il n’inclut pas les nouveaux fichiers non suivis ni ceux ignorés, comme ceux listés dans .gitignore.
Comment enregistrer des modifications avec git stash
Dans cette section, je vous présente trois façons courantes de stasher des changements. Contexte constant : vous travaillez sur un projet de pipeline de données avec les fichiers data_pipeline.py, config.yaml et tests/test_pipeline.py.
Stasher les modifications suivies
Puisque git stash enregistre les modifications suivies ou indexées, lancez git status pour vérifier l’état des fichiers dans votre répertoire de travail. Après git stash, les changements suivis indexés et non indexés sont sauvegardés, vous laissant un répertoire de travail propre.

Inclure les modifications non suivies et les nouveaux fichiers
Par défaut, git stash ignore les fichiers jamais ajoutés au dépôt. Si vous avez créé un nouveau fichier de test, un stash standard le laissera dans votre répertoire, ce qui peut poser problème lors d’un changement de branche.

Si vous exécutez git stash, ce fichier restera. Pour l’inclure, utilisez l’option -u ou --include-untracked :
git stash -u

Pour inclure absolument tous les fichiers, y compris ceux explicitement ignorés par votre .gitignore, utilisez git stash --all ou -a. Faites toutefois attention : vous pourriez embarquer des journaux ou artefacts de build par inadvertance.
Nommer votre stash
Avec git stash, des messages par défaut comme WIP on main deviennent vite ambigus si vous avez plusieurs stashes. Pour éviter cela, ajoutez toujours un message explicite lorsque vous voulez pousser vos stashes.
git stash push -m "refactor pipeline config handling."
Vous pouvez utiliser git stash list pour afficher et comparer la liste des stashes. Notez la différence entre un stash nommé et les entrées par défaut.

Des messages clairs facilitent grandement l’identification du bon stash, surtout lorsque vous gérez plusieurs tâches ou que vous collaborez en équipe.
Je vous recommande d’explorer nos parcours GitHub Foundations et Git Fundamentals pour apprendre le contrôle de version avec Git, des bases aux workflows avancés : suivi des changements, gestion des dépôts et collaboration efficace.
Comment afficher et inspecter vos stashes
Avant d’appliquer un stash à l’aveugle, vérifiez son contenu. Cette étape, souvent négligée, évite la confusion ou les écrasements accidentels.
git stash list : lister tous les stashes
Utilisez la commande ci-dessous pour afficher votre pile de stashes :
git stash list

Vous savez désormais que les stashes suivent un ordre LIFO. Le plus récent est toujours stash@{0}, chaque nouveau repoussant les précédents vers le bas de la pile.
git stash show : inspecter un stash avant application
Pour un résumé rapide des changements dans un stash, utilisez show sur une entrée précise. Par exemple, la commande ci-dessous affiche les modifications du dernier stash :
git stash show stash@{0}

Pour voir les changements réels (diff complet), utilisez la commande ci-dessous pour afficher toutes les modifications ligne par ligne stockées dans ce stash.
git stash show -p stash@{0}

Bonne pratique : inspectez toujours un stash avant de l’appliquer, surtout s’il date de quelques jours ou si vous n’êtes pas certain de son contenu.
Comment restaurer des modifications stashtags
Une fois vos travaux mis de côté avec git stash, vous devrez les récupérer. Deux méthodes principales permettent de restaurer des stashes, y compris en ciblant une entrée précise par son index.
git stash pop : appliquer et supprimer
La manière la plus courante. Elle prend le stash au sommet (stash@{0}), applique les changements sur votre branche courante puis supprime ce stash de la pile.
git stash pop

Après pop, vos changements sont restaurés et le stash supprimé. Utilisez pop lorsque vous êtes certain d’en avoir fini avec cet état sauvegardé et souhaitez garder une liste propre.
Pour aller plus loin sur pop, consultez notre tutoriel Git Stash Pop pour apprendre à sauvegarder du travail non validé lors d’un changement de branche dans votre dépôt.
git stash apply : appliquer et conserver
Si vous souhaitez restaurer les changements tout en gardant le stash pour réutilisation, utilisez apply comme suit :
git stash apply stash@{1}

Référencer un stash par son index stash@{1} cible précisément l’entrée à restaurer. Utile pour appliquer les mêmes changements sur plusieurs branches, par exemple un ajustement de configuration partagé à pousser sur main et staging.
Utilisez git stash list pour confirmer que le stash est toujours présent après apply.

Comment stasher de manière sélective
Dans des projets réels, les changements s’entremêlent souvent. Vous pouvez souhaiter ne mettre de côté qu’une partie de votre travail et conserver le reste. Git propose deux méthodes pour un contrôle fin.
git stash push -m : stasher des fichiers précis
Si vous savez exactement quels fichiers doivent être mis de côté, indiquez leurs chemins pour ne stasher que ceux-là :
Par exemple, la commande ci-dessous ne stashe que le fichier data_pipeline.py. Utile pour mettre en pause une fonctionnalité expérimentale tout en gardant une correction de bug prête à valider.
git stash push -m "stash experimental pipeline logic" data_pipeline.py
Pour vérifier l’exécution, utilisez git status pour comparer l’état avant/après de votre dépôt.

git stash push -p -m : stasher des blocs précis en mode interactif
Parfois, du « bon » code et du code « WIP » cohabitent dans le même fichier. Dans ce cas, utilisez -p ou --patch pour démarrer une session interactive. Vous choisirez des blocs (« hunks ») spécifiques à l’intérieur d’un fichier.
git stash push -p -m "Selective stash of pipeline logic"

Vous verrez « Stash this hunk » avec ces options :
-
y: oui, stasher ce hunk -
n: non, passer ce hunk -
q: quitter ; ne pas stasher ce hunk ni les suivants -
a: tous ; stasher ce hunk et tous les suivants du fichier -
d: supprimer ; ne pas stasher ce hunk ni les suivants du fichier -
?: aide
Ce flux de travail est très proche de git add -p. Pratique quand des changements dans un même fichier sont sans lien et doivent être gérés séparément.
Comment nettoyer votre stash
Les stashes sont faits pour vivre peu de temps. Si vous les accumulez, il sera plus difficile de retrouver le bon et le risque de conflits augmente au moment de les appliquer.
git stash drop : supprimer un stash précis
Pour retirer un seul stash, utilisez git stash drop avec son index. Par exemple, la commande ci-dessous supprime le 4e stash de la liste.
git stash drop stash@{3}

Comme on le voit, la liste est réduite et les stashes restants sont réindexés après la suppression.
git stash clear : tout effacer
Pour supprimer tous les stashes d’un coup, utilisez :
git stash clear
Cette commande ne produit aucune sortie en cas de succès. Vérifiez avec git stash list.

Soyez particulièrement prudent avec git stash clear : l’action est définitive et il n’y a pas d’annulation intégrée. N’exécutez-la que si vous êtes sûr de ne plus avoir besoin d’aucun stash.
git stash branch : convertir un stash en branche
Si votre branche actuelle a beaucoup divergé depuis la création du stash, son application peut provoquer des conflits de fusion. Dans ce cas, créez une nouvelle branche directement depuis le stash :
git stash branch pipeline-fix stash@{1}

Cette commande effectue :
- Création d’une nouvelle branche depuis le commit d’origine où le stash a été fait
- Application du stash
- Suppression de l’entrée de la liste des stashes
Je vous recommande notre tutoriel Git Branch pour approfondir la gestion des branches et améliorer collaboration et développement.
Autres commandes Git stash utiles
Au-delà des usages courants, voici quelques commandes avancées git stash à connaître :
-
git stash create: crée un objet de stash sans l’ajouter à la liste -
git stash store: stocke un stash créé avec create -
git stash export: exporte un stash vers une référence ou l’affiche -
git stash import: importe un stash depuis un commit existant
Erreurs fréquentes et comment les corriger
Même si git stash est simple, quelques pièges reviennent souvent. Voici des erreurs que j’ai rencontrées, comment les reconnaître et les résoudre rapidement.
No local changes to save
L’« erreur » la plus courante… qui n’en est pas une. Elle survient lorsque vous exécutez git stash sur un répertoire de travail propre, sans fichiers suivis modifiés ni indexés.
Pour corriger, lancez git status ; si rien n’apparaît, il n’y a tout simplement rien à stasher.

Conflit lors de l’application d’un stash
Les conflits surviennent lorsque la branche courante a modifié les mêmes lignes que celles présentes dans votre stash. Par exemple, après git stash pop sur une nouvelle branche où le fichier a été modifié, vous verrez probablement un message d’erreur :

Vous verrez alors des marqueurs de conflit dans le fichier :

Pour résoudre :
- Résolvez les conflits manuellement dans le fichier
- Indexez les fichiers résolus
git add data_pipeline.py
- Supprimez manuellement le stash avec
git stash drop(s’il n’est PAS retiré automatiquement en cas de conflit)
Si les conflits sont trop complexes, appliquez plutôt les changements sur une base propre avec la commande ci-dessous.
git stash branch recovery-branch stash@{0}
Vous avez stashtags des fichiers par erreur
Il arrive d’exécuter git stash sans vérifier son répertoire de travail, puis de réaliser plus tard que vous avez caché une correction que vous vouliez réellement valider.
Pour éviter cela, soyez explicite sur les fichiers à stasher. Par exemple, la commande ci-dessous ne stashera que data_pipeline.py au lieu de tout le répertoire de travail.
git stash push data_pipeline.py
Vous pouvez aussi utiliser git stash -p pour le mode interactif (patch) et ne stasher que certaines parties des changements dans les fichiers, pas les fichiers entiers.
Mesure préventive : vérifiez toujours git status avant de stasher.
Conclusion
En règle générale, gardez vos stashes éphémères et utilisez des messages descriptifs. Si vous n’y revenez pas dans la journée, créez plutôt une branche WIP : vous pourrez la pousser sur un remote et elle ne se perdra pas.
Pour renforcer vos compétences Git, je vous recommande notre cours Intermediate Git pour apprendre à collaborer avec Git. Je vous recommande aussi Advanced Git pour travailler avec Git sur de gros projets et gérer des scénarios complexes de contrôle de version dans le développement de pipelines de données.
FAQ sur Git stash
Git stash enregistre-t-il les fichiers non suivis ?
Non, par défaut, git stash n’enregistre que les fichiers suivis. Pour inclure les fichiers non suivis, utilisez git stash -u.
Git stash affecte-t-il mon historique de commits ?
Non, les stashes sont distincts de votre historique de commits et n’apparaissent pas dans les logs de votre branche.
Quelle est la différence entre git stash pop et git stash apply ?
git stash pop applique le stash et le supprime, tandis que git stash apply applique le stash mais le conserve dans la liste.
Pourquoi Git affiche-t-il « No local changes to save » ?
Ce message apparaît lorsque votre répertoire de travail est propre : aucun fichier suivi modifié ni indexé à stasher.
Qu’est-ce qui provoque des conflits lors de la restauration d’un stash ?
Les conflits se produisent lorsque les mêmes portions de fichiers ont été modifiées à la fois dans votre branche courante et dans le stash.

