Soyez relax, faites vous un petit Git stash


Stash n’est juste cool parceque ça veut dire joint en anglais, c’est aussi une fabuleuse fonctionalité de Git.

Quand vous devez faire un merge ou un checkout mais qu’il y a des modifications non sauvegardées en cours sur vos fichiers, Git va vous demander d’y remedier. Soit vous commitez les changements, soit vous les annulez, sans quoi pas de merge ni de checkout possible.

Dans d’autres cas vous travaillez sur un truc à moitié fini que vous ne voulez pas commiter encore (parceque c’est moche). Mais un bug est découvert qui prendra une seconde à corriger. Ca fait chier de mettre à l’eau toute les modifs ou de créer une branche pour ça.

Il existe une autre solution: Git stash

Git stash pour sauvegarder les modifications

Mettez vous dans le dossier racine de votre projet et modifiez un fichier. Faites ensuite ‘git stash‘ (ça ne craint rien).

Toutes les modifications disparaissent ! (ça ne craint rien j’ai dis !)

Vos fichiers se retrouvent dans l’état dans lequel il était à la dernière sauvegarde. Ils ont été “stashé”, c’est à dire que les modifications on été sauvegardées dans un endroit à part spécialement pour ça.

Vous pouvez alors faire toutes les opérations que vous voulez. Quand vous avez terminé…

Git stash apply pour restaurer les modifications

Et vos fichiers se retrouvent à nouveau modifiés. Git stash permet en effet de sauvegarder temporairement des modifications pour les remettre à plus tard. Ce n’est pas un moyen sur de faire des backup, ni un remplacement pour l’historique normal de Git. C’est un juste un moyen pratique de dire “je verrai ça plus tard“: git stash, truc à faire, et git stash apply.

Git stash list pour voir la liste des stashs

On peut faire plusieurs stashs à droite et gauche. Comment s’y retrouver ?

Git stash list vous donnera la liste des stashs de ce repository:

$test(master) sam$ git stash list
stash@{0}: WIP on master: bd30f7b a
stash@{1}: WIP on master: bd30f7b a

Pour appliquer un stash en particulier, par exemple “stash@{0}

git stash apply stash@{0}

Pour savoir ce qu’il y a dans un stash:

git stash show stash@{0}

Aller plus loin avec git stash

Si un stash commence à être précieux, et que vous sentez que vous aller devoir bosser dessus pas mal de temps, vous pouvez toujours décider de finalement faire une branche avec:

git stash branch stash@{0}

Pour supprimer un stash:

git stash drop stash@{0}

Pour toutes ces commandes, si on ne précise pas le stash ciblé, le dernière créé sera utilisé par défaut.

La plupart du temps on créé un stash de manière temporaire, donc plutot que de faire un stash apply puis un stash drop, on peut faire:

git stash pop

Cela fait un stash apply avec le stash le plus récent, mais en plus cela supprime le stash de la liste.

Comme les stashs sont comme des commits ordinaires, mais simplement en dehors de tout historique et de toute branche, on peut faire toutes les operations qu’on fait sur les commit sur les stashs: merge, checkout, patch, etc. Cela dit c’est un usage avancé que je ne recommande pas au débutant car il faut être capable de visualiser l’état de son travail du point de vue de Git pour s’en sortir.

Si vous découvrez Git, vous n’avez vraiment que deux commandes dont ils faut se souvenir:

git stash
git stash apply

10 thoughts on “Soyez relax, faites vous un petit Git stash

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.