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 ?
Réponses
Trop de publicités?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.
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).
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
".
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.