21/04/2021

2. La planque

Lu 985 fois Licence Creative Commons

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

  1. Modifier quelques fichiers, créer une entrée de stash.

  2. Sur la branche master, modifier la "feuille de triche" (ajoutez les commandes stash ?), et ajouter un commit.

  3. Revenir sur la branche experimental puis récupérer le contenu de l'entrée de stash.