{{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