web-dev-qa-db-fra.com

Cachez les modifications tout en conservant les modifications dans le répertoire de travail dans Git

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

115
Michael Dorst

Pour ce que cela vaut, une autre façon de faire est d’organiser les modifications que vous souhaitez conserver, puis de tout ranger à l’aide de --keep-index:

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

Les commandes ci-dessus cachent tout, y compris modified-file.txt, mais il laissera également ce fichier en attente et dans votre répertoire de travail.

De la documentation documentation officielle du noyau Linux Git pour git stash :

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

117
user456814

git stash et alors git stash apply (git stash && git stash apply) va cacher les fichiers et appliquer la cachette immédiatement après. Donc, après tout, vous aurez vos changements en cache et en répertoire de travail.

Vous pouvez créer un alias si vous le souhaitez 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 sur les fichiers en question seront modifiés. (C’est pourquoi Emacs se plaint lorsque j’essaie de sauvegarder le fichier s’il était ouvert avant le git sta, et peut entraîner des reconstructions inutiles si vous utilisez make ou des amis.)

44
madhead

Une petite amélioration dans la réponse qui, dans la pratique, est susceptible d’être utilisée.

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

Il y a une astuce qui peut vous aider, ne cachez pas quelque chose 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 maintenant que vous avez une réserve cachée à votre disposition, il n’est pas possible de faire un git stash pop _ de toute façon, mais vous pouvez créer des correctifs, réinitialiser des fichiers, etc. à partir de là, vos fichiers de répertoire de travail restent également intacts.

3
KenIchi