pour un fichier unique , au lieu de jongler avec les commandes de stash, une approche beaucoup plus simple consiste à copier un seul fichier et lorsque vous souhaitez le ramener simplement à copier sur l'original. par exemple. cp just_my_file.txt just_my_file.txt.manualstash maintenant vous pouvez faire toutes les extractions et tout le reste et comme la copie est un "fichier non suivi", vous pouvez vous déplacer à travers les branches et commits sans aucun problème. Lorsque vous êtes sur la bonne branche / commit où vous voulez "fusionner le fichier unique ", faites-le mv just_my_file.txt.manualstash just_my_file.txtet maintenant vous pouvez revoir les modifications et les valider si nécessaire
Dimitry K
Réponses:
174
Je pense que stash -pc'est probablement le choix que vous voulez, mais juste au cas où vous rencontriez d'autres choses encore plus délicates à l'avenir, rappelez-vous que:
Stashest vraiment juste une alternative très simple aux seuls ensembles légèrement plus complexes branch. Stash est très utile pour déplacer rapidement les choses, mais vous pouvez accomplir des choses plus complexes avec des branches sans trop de maux de tête et de travail.
allez-y et faites ce que vous voulez, puis plus tard simplement rebaseet / ou mergele tmpbranch. Il est vraiment pas que beaucoup de travail supplémentaire de quand vous avez besoin de faire un suivi plus prudent que Stash permettra.
Cette réponse semble le plus droit devant moi quand la prise de modifier les changements: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey
1
Je pense que cela doit reposer sur des fonctionnalités très nouvelles. Cela ne fonctionne pas dans git 2.1.4.
Richard Smith
Cela se traduit par un comportement étrange pour moi, avec la sauvegarde en cours de sauvegarde, mais les mêmes fichiers sont ajoutés à la mise en scène en même temps (git v2.20.1),
paradroid
58
Vous pouvez cacher de manière interactive des lignes simples avec git stash -p(analogue à git add -p).
Cela ne prend pas de nom de fichier, mais vous pouvez simplement sauter d'autres fichiers avec djusqu'à ce que vous atteigniez le fichier que vous voulez cacher et que tous les changements y soient modifiés a.
Cela prend beaucoup de temps si vous avez beaucoup de fichiers que vous ne voulez pas cacher.
jjj
23
Je ne sais pas quand cela a changé, mais à partir de git 2.14.1vous pouvez spécifier le nom du fichiergit stash -p <filename>
muon
21
La meilleure option est de tout mettre en scène sauf ce fichier, et de dire à stash de conserver l'index avec git stash save --keep-index, en cachant ainsi votre fichier non organisé:
Comme le fait remarquer Dan, thefiletostashest le seul à être réinitialisé par le cache, mais il cache également les autres fichiers, donc ce n'est pas exactement ce que vous voulez.
Bien que cela garde l'index dans le même état, cela ne cache-t-il pas également les fichiers qui se trouvent dans l'index? En d'autres termes, si après avoir fait cela, vous validez l'index dans la branche actuelle, puis passez à une autre branche et le faites git stash pop, cela ne va-t-il pas appliquer tous les fichiers, pas seulement le fichier que nous voulions cacher?
Dan Molding le
@DanMoulding: vous avez tout à fait raison, je n'y ai pas pensé.
CharlesB
16
Juste au cas où vous entendiez réellement `` annuler les modifications '' chaque fois que vous utilisez `` git stash '' (et n'utilisez pas vraiment git stash pour le cacher temporairement), dans ce cas, vous pouvez utiliser
git checkout -- <file>
Notez que git stash est juste une alternative plus rapide et simple à la création de branches et aux tâches.
Je pense que c'est la meilleure réponse si vous souhaitez supprimer toutes vos modifications modifiées dans un seul fichier.
Mohamed Haseel le
et je voudrais que ce soit la meilleure réponse pour cette tâche particulière
Zakir hussain
6
La question était assez claire et ne demandait pas comment rétablir les modifications apportées à un fichier. Voté contre.
Richard Smith
@MukulJain J'avais en fait besoin d'utiliser le stash-per-file de manière très temporaire (en gros séparant certains changements en deux commits qui affectaient les mêmes lignes, pour un fichier). Je ne voterai pas vraiment contre, mais je dirai simplement que cela ne me sert à rien.
cp just_my_file.txt just_my_file.txt.manualstash
maintenant vous pouvez faire toutes les extractions et tout le reste et comme la copie est un "fichier non suivi", vous pouvez vous déplacer à travers les branches et commits sans aucun problème. Lorsque vous êtes sur la bonne branche / commit où vous voulez "fusionner le fichier unique ", faites-lemv just_my_file.txt.manualstash just_my_file.txt
et maintenant vous pouvez revoir les modifications et les valider si nécessaireRéponses:
Je pense que
stash -p
c'est probablement le choix que vous voulez, mais juste au cas où vous rencontriez d'autres choses encore plus délicates à l'avenir, rappelez-vous que:Stash
est vraiment juste une alternative très simple aux seuls ensembles légèrement plus complexesbranch
. Stash est très utile pour déplacer rapidement les choses, mais vous pouvez accomplir des choses plus complexes avec des branches sans trop de maux de tête et de travail.allez-y et faites ce que vous voulez, puis plus tard simplement
rebase
et / oumerge
le tmpbranch. Il est vraiment pas que beaucoup de travail supplémentaire de quand vous avez besoin de faire un suivi plus prudent que Stash permettra.la source
Si vous ne souhaitez pas spécifier de message avec vos modifications cachées, passez le nom de fichier après un double tiret.
S'il s'agit d'un fichier non suivi / nouveau, vous devrez d'abord le mettre en scène.
Toutefois, si vous ne voulez spécifier un message, l' utilisation
push
.Les deux méthodes fonctionnent dans les versions 2.13+ de git
la source
git stash -- filename.ext
,git commit --amend
,git stash pop
Vous pouvez cacher de manière interactive des lignes simples avec
git stash -p
(analogue àgit add -p
).Cela ne prend pas de nom de fichier, mais vous pouvez simplement sauter d'autres fichiers avec djusqu'à ce que vous atteigniez le fichier que vous voulez cacher et que tous les changements y soient modifiés a.
la source
git 2.14.1
vous pouvez spécifier le nom du fichiergit stash -p <filename>
La meilleure option est de tout mettre en scène sauf ce fichier, et de dire à stash de conserver l'index avec
git stash save --keep-index
, en cachant ainsi votre fichier non organisé:Comme le fait remarquer Dan,
thefiletostash
est le seul à être réinitialisé par le cache, mais il cache également les autres fichiers, donc ce n'est pas exactement ce que vous voulez.la source
git stash pop
, cela ne va-t-il pas appliquer tous les fichiers, pas seulement le fichier que nous voulions cacher?Juste au cas où vous entendiez réellement `` annuler les modifications '' chaque fois que vous utilisez `` git stash '' (et n'utilisez pas vraiment git stash pour le cacher temporairement), dans ce cas, vous pouvez utiliser
Notez que git stash est juste une alternative plus rapide et simple à la création de branches et aux tâches.
la source