Contexte
Vous travaillez sur votre nouvelle fonctionnalité sur une branche dédiée, mais on vous informe d'un bug important à régler immédiatement sur la branche principale. Vous ne souhaitez pas créer de commit tout de suite car vous n'êtes pas prêt.
« Ah ben c'est pas que ça m'embête, mais ... »
Bien sûr vous pourriez créer un commit temporaire puis effectuer un soft reset, ou vous pourriez utiliser la commande stash
...
Stash
La commande stash
permettra d'enregistrer une entrée stash contenant vos modifications (et le staging):
git status
[output]On branch experimental
[output]Changes to be committed:
[output] (use "git restore --staged <file>..." to unstage)
[output] new file: nouveau_fichier.txt
[output]
[output]Changes not staged for commit:
[output] (use "git add <file>..." to update what will be committed)
[output] (use "git restore <file>..." to discard changes in working directory)
[output] modified: README.md
git stash
[output]Saved working directory and index state WIP on experimental: f6b5327 Ajoute un résumé des annulations
git status
[output]On branch experimental
[output]nothing to commit, working tree clean
Note: les nouveaux fichiers qui n'ont pas été ajouté au staging ne sont pas enregistrés, à moins d'utiliser l'option
--include-untracked
(ou-u
).
On peut voir la liste des entrées avec la sous-commande list
:
git stash list
[output]stash@{0}: WIP on experimental: f6b5327 Ajoute un résumé des annulations
Pour récupérer le contenu de l'entrée et la supprimer de la liste, utiliser la sous-commande pop
:
git stash pop
[output]On branch experimental
[output]Changes to be committed:
[output] (use "git restore --staged <file>..." to unstage)
[output] new file: nouveau_fichier.txt
[output]
[output]Changes not staged for commit:
[output] (use "git add <file>..." to update what will be committed)
[output] (use "git restore <file>..." to discard changes in working directory)
[output] modified: README.md
[output]
[output]Dropped refs/stash@{0} (4c482ef2f9f94b7bd6620b19edbcdc97b1ec628d)
Partie pratique
-
Modifier quelques fichiers, créer une entrée de stash.
-
Sur la branche
master
, modifier la "feuille de triche" (ajoutez les commandesstash
?), et ajouter un commit. -
Revenir sur la branche
experimental
puis récupérer le contenu de l'entrée de stash.