web-dev-qa-db-fra.com

Ne stockez qu'un seul fichier

J'aimerais pouvoir stocker uniquement les modifications à partir d'un seul fichier:

git stash save -- just_my_file.txt

Ce qui précède ne fonctionne pas bien. Des alternatives?

108
EoghanM

Je pense stash -p est probablement le choix que vous souhaitez, mais si jamais vous rencontriez des problèmes encore plus délicats à l’avenir, rappelez-vous que:

Stash n'est en réalité qu'une alternative très simple aux ensembles légèrement plus complexes que branch. Stash est très utile pour déplacer rapidement des objets, mais vous pouvez accomplir des tâches plus complexes avec des branches sans trop de maux de tête et de travail.

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

allez et faites ce que vous voulez, puis plus tard simplement rebase et/ou merge le tmpbranch. Ce n'est vraiment pas que beaucoup de travail supplémentaire lorsque vous devez faire un suivi plus minutieux que ce que permet stash.

124
Wes Hardaker

Vous pouvez cacher de manière interactive des lignes simples avec git stash -p (analogue à git add -p).

Cela ne prend pas un nom de fichier, mais vous pouvez simplement ignorer d'autres fichiers avec d jusqu'à ce que vous atteigniez le fichier que vous voulez stocké et que tous les changements y sont stockés avec a.

49
Benjamin Bannier

La meilleure option est de tout organiser, sauf ce fichier, et d'indiquer à stash de conserver l'index avec git stash save --keep-index, stockant ainsi votre fichier non mis en scène:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

Comme Dan le fait remarquer, thefiletostash est le seul à être réinitialisé par la réserve, mais il bloque également les autres fichiers, de sorte qu'il ne correspond pas exactement à ce que vous voulez.

18
CharlesB

Si vous ne souhaitez pas spécifier de message avec vos modifications stockées, transmettez le nom du fichier après un double tiret.

$ git stash -- filename.ext

S'il s'agit d'un fichier non suivi/nouveau, vous devez d'abord le mettre en scène.

Cependant, si vous faites voulez spécifier un message, utilisez Push.

git stash Push -m "describe changes to filename.ext" filename.ext

Les deux méthodes fonctionnent dans les versions 2.13+ de git

15
sealocal

Juste au cas où vous voudriez vraiment dire "ignorer les modifications" à chaque fois que vous utiliserez "git stash" (et n'utilisez pas vraiment git stash pour le stocker temporairement), dans ce cas, vous pouvez utiliser

git checkout -- <file>

Notez que git stash n’est qu’une alternative simple et rapide aux branches et aux tâches.

11
Devesh