228 votes

Stash des changements tout en conservant les changements dans le répertoire de travail dans Git

Y a-t-il un git stash qui stocke vos modifications, mais les conserve également dans le répertoire de travail ? Donc, en gros, une git stash; git stash apply en une seule étape ?

227voto

Pour ce que ça vaut, une autre façon de procéder est de mettre en scène les changements que vous voulez conserver, puis de tout mettre en cache en utilisant --keep-index :

$ git add modified-file.txt
$ git stash push --keep-index

Les commandes ci-dessus vont tout cacher, mais elles laisseront les fichiers dans votre répertoire de travail.

De la la documentation officielle Git du noyau Linux pour git stash ou de git-scm :

Si le --keep-index est utilisée, toutes les modifications déjà ajoutées à l'index sont laissées intactes.

82voto

madhead Points 4504

git stash y luego git stash apply ( git stash && git stash apply ) mettra les fichiers en cachette et appliquera la cachette immédiatement après. Ainsi, après tout, vous aurez vos changements dans la cachette et dans le répertoire de travail.

Vous pouvez créer un alias si vous le voulez en un seul morceau. Il suffit de mettre quelque chose comme ceci à ~/.gitconfig :

[alias]
    sta = "!git stash && git stash apply"

L'inconvénient de cette approche est que tous les fichiers sont stockés et recréés. Cela signifie que les horodatages des fichiers en question seront modifiés. (Ce qui fait qu'Emacs se plaint lorsque j'essaie d'enregistrer le fichier si je l'ai ouvert avant de faire la commande git sta et peut provoquer des reconstructions inutiles si vous utilisez la fonction make ou des amis).

13voto

Premchandra Singh Points 1164

Une petite amélioration de la réponse qui, en pratique, pourrait être utilisée.

$ git add modified-file.txt  
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"

13voto

M. Justin Points 911

Vous pouvez utiliser git stash create pour créer un commit de la cachette, puis l'enregistrer dans la cachette à l'aide de la commande git stash store :

git stash store $(git stash create) -m "Stash commit message"

Ceci peut être sauvegardé dans un alias git pour être plus pratique :

git config --global alias.stash-keep '!git stash store $(git stash create)'

git stash-keep -m "Stash commit message"

Notez que cela ne fait pas tout que git stash push fait. Par exemple, il n'ajoute pas le nom de la branche au commit, par exemple " stash@{0}: On myBranch: Stash commit message ".

4voto

KenIchi Points 154

Il y a une astuce qui peut vous aider, pas de "stash" mais FWIW :

git add -A
git commit -m "this is what's called stashing"       (create new stash commit)
git tag stash                               (mark the commit with 'stash' tag)
git reset HEAD~        (Now go back to where you've left with your working dir intact)

Et donc, maintenant que vous avez à votre disposition une réserve de balises de commit, il n'est pas possible de faire un git stash pop de toute façon, vous pouvez faire des choses comme créer des patchs ou réinitialiser des fichiers etc. à partir de là, vos fichiers de répertoire de travail sont également laissés intacts BTW.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X