{{tag>dev git stash}}
:TODO_DOCUPDATE:
====== Déplacer les modifications vers une nouvelle branche ======
Une bonne pratique consiste à ne pas apporter directement des modifications sur la branche master/main. En général:
* On crée une branche de développement dédiée à la fonctionnalité ;
* On commit de façon atomique jusqu'a obtenir un résultat stable/fonctionnel ;
* Une fois la fonctionnalité mise en œuvre, testée et stable, on fusionne sur la branche master.
Par erreur/inattention on modifie parfois les fichiers du working directory alors que l'on se trouve encore sur master. A ce moment je n'ai pas fait de commit, je souhaite alors annuler mes modifications, basculer sur une branche de travail et refaire les modifications sur cette branche.
# git branch m'indique que je suis bien sur master
$ git branch
experimental
* master
# git status confirme que le fichier cdc.adoc a été modifié
$ git status -s
M doc/cdc.adoc
Pour éviter d'avoir à annuler et recréer mes modifications je peux utiliser **git stash**
Si des fichiers ont été placés dans l'index, il faudra les retirer de l'index avec la commande **git reset**.
# Les modification sont sauvegardées dans une branche temporaire
$ git stash save
Saved working directory and index state WIP on master: 53accfe Intégration de la bibliothèque ncurses
HEAD est maintenant à 53accfe Intégration de la bibliothèque ncurses
# git stash list pour afficher les sauvegardes existantes
$ git stash list
stash@{0}: WIP on master: 53accfe Intégration de la bibliothèque ncurses
# On se positionne sur une nouvelle branche de travail
$ git checkout -b menu
# On applique le patch sur la branche de travail (applique le dernier stash)
$ git stash apply
Les modifications sont placées sur notre branche de travail, on peut continuer à travailler normalement et faire les commits sur la branche de travail, master reste propre.
Enfin on peut supprimer le stash puisqu'il a été appliqué:
$ git stash clear