Git

GIT STASH : SAUVEGARDER SON TRAVAIL SANS LE COMMITER

D

Mercredi 29 août 2018

Mis à jour le mercredi 29 août 2018

Git stash : sauvegarder son travail sans le commiter

Des fois, on veut changer de branche pour faire un merge ou autre chose, peu importe. Mais des fois, on a du travail non commité et le changement de branche peut être refusé tant que le travail n'a pas été commité.
Dans ce cas, on peut utiliser la commande git stash qui va sauvegarder le travail en cours, un peu comme un commit mais ce n'est pas un commit. Le travail en cours disparait des fichiers, ce qui rend la branche propre et vous pouvez ainsi changer de branche.
Le travail est sauvegardé, on peut changer de branche, faire des merges, faire des commits, faire tout ce que vous voulez, et, quand on le désire, on peut remettre le travail sur nos fichiers pour continuer à travailler dessus ou parce que c'est le moment de comiter ce travail.

Tout d'abord, pour bien vous montrer comment cette commande fonctionne, faisons un git status :
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   index.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   lib/simplegit.rb
#
Nous avons du travail commité (le fichier index.html) et du travail non commité (le fichier lib/simplegit.rb).

Faisons notre git stash :
$ git stash
Saved working directory and index state \
  "WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file
(To restore them type "git stash apply")
Le travail non commité disparait de nos fichiers, notre branche devient "propre" et le travail est sauvegardé.

Si nous refaisons notre git status pour bien comprendre, on obtient :
$ git status
# On branch master
nothing to commit, working directory clean
La branche est maintenant propre.

Pour voir la liste de nos travaux "stashé", on utilise la commande git stash list :
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
Ici on a trois travaux de "stashés".

Et pour remettre notre travail stashé sur la branche actuelle, on utilise git stash apply qui reprend le dernier stash ou git stash apply stash@{2} qui reprend le stash spécifié en paramètre.

J'ai repris les exemples de la documentation de git que l'on trouve ici : https://git-scm.com/book/en/v1/Git-Tools-Stashing.


Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire


PsyLobe Le mercredi 2 décembre 2020 à 13:11:06
Merci pour le tuto ;)