J'ai apporté des modifications à un fichier, plus un nouveau fichier, et j'aimerais utiliser git stash pour les ranger pendant que je passe à une autre tâche. Mais git stash en lui-même ne cache que les modifications apportées au fichier existant; le nouveau fichier reste dans mon arbre de travail, encombrant mon futur travail. Comment puis-je cacher ce fichier non suivi?
1437
git stash show
ne retourne rien et vous pourriez être tenté de le supprimer (comme je viens de le faire alors qu'il contenait un script utile que j'ai écrit il y a quelques mois) → comment récupérer une réserve perdue )Réponses:
Pour ranger votre répertoire de travail, y compris les fichiers non suivis (en particulier ceux qui sont dans le .gitignore), alors vous voudrez probablement utiliser cette cmd:
git stash --include-untracked
Plus de détails:
Mise à jour du 17 mai 2018:
Les nouvelles versions de git ont désormais
git stash --all
qui stocke tous les fichiers, y compris les fichiers non suivis et ignorés.git stash --include-untracked
ne touche plus les fichiers ignorés (testé sur git 2.16.2).Réponse originale ci-dessous:
Attention, cela supprimera définitivement vos fichiers si vous avez des entrées de répertoire / * dans votre fichier gitignore.
Depuis la version 1.7.7, vous pouvez utiliser
git stash --include-untracked
ougit stash save -u
pour cacher des fichiers non suivis sans les mettre en scène.Ajoutez (
git add
) le fichier et commencez à le suivre. Puis planque. Étant donné que le contenu entier du fichier est nouveau, il sera caché et vous pourrez le manipuler si nécessaire.la source
git stash --include-untracked
avantgit stash --all
dans votre réponse pour deux raisons. D'abord, il répond mieux à la question du PO maintenant en 2019 et ensuite parce que --tout fait quelque chose que la plupart des utilisateurs ne veulent probablement pas en ce qu'il supprime tous les fichiers qui sont .gitignoredDepuis git 1.7.7,
git stash
accepte l'--include-untracked
option (ou raccourci-u
). Pour inclure des fichiers non suivis dans votre stash, utilisez l'une des commandes suivantes:Attention, cela supprimera définitivement vos fichiers si vous avez des entrées de répertoire / * dans votre fichier gitignore.
la source
.gitignore
ressemble à ceciignoredDirectory
et non,ignoredDirectory/*
il supprime toujours ceux qui ne sont pas suivis. Même les fichiers non suivis, pas seulement les répertoires.*.extension
entrées?git
1.8.3-u
(--include-untracked
) peut bien cacher et pop les fichiers non suivis maisgit stash show
ne répertorie pas les fichiers non suivis qui sont dans la réserveAjoutez le fichier à l'index:
L'intégralité du contenu de l'index, ainsi que toutes les modifications non mises en scène des fichiers existants, seront tous placés dans la cachette.
la source
git add .
ne le prenait pas en considération pour une raison quelconqueDans git bash, le stockage des fichiers non suivis est réalisé en utilisant la commande
ou
http://git-scm.com/docs/git-stash
git stash supprime tous les fichiers non suivis ou non engagés de votre espace de travail. Et vous pouvez rétablir git stash en utilisant les commandes suivantes
Cela replacera le fichier dans votre espace de travail local.
Mon expérience
J'ai dû effectuer une modification de mon fichier gitIgnore pour éviter le déplacement des fichiers .classpath et .project dans le référentiel distant. Je ne suis pas autorisé à déplacer ce .gitIgnore modifié dans le référentiel distant à partir de maintenant.
Les fichiers .classpath et .project sont importants pour eclipse - qui est mon éditeur java.
J'ai tout d'abord ajouté sélectivement le reste des fichiers et je me suis engagé pour la mise en scène. Cependant, la poussée finale ne peut pas être effectuée à moins que les fichiers .gitIgnore modifiés et les fichiers non suivis à savoir. .project et .classpath ne sont pas cachés.
j'ai utilisé
pour ranger le fichier .gitIgnore modifié.
Pour ranger les fichiers .classpath et .project, j'ai utilisé
et il a supprimé les fichiers de mon espace de travail. L'absence de ces fichiers enlève ma capacité de travailler sur mon lieu de travail dans Eclipse. J'ai poursuivi la procédure de transfert à distance des fichiers validés. Une fois que cela a été fait avec succès, j'ai utilisé
Cela a collé les mêmes fichiers dans mon espace de travail. Cela m'a redonné ma capacité à travailler sur le même projet dans Eclipse. J'espère que cela écarte les idées fausses.
la source
~/.gitignore
.Comme cela a été dit ailleurs, la réponse est au
git add
dossier. par exemple:Cependant, la question se pose également dans une autre réponse: que faire si vous ne voulez pas vraiment ajouter le fichier? Pour autant que je sache, vous devez le faire. Et ce qui suit ne fonctionnera PAS :
cela échouera, comme suit:
Alors que peux-tu faire? Eh bien, vous devez vraiment ajouter le fichier, cependant , vous pouvez effectivement le supprimer ultérieurement, avec
git rm --cached
:Et puis vous pouvez continuer à travailler, dans le même état que vous étiez avant le
git add
(à savoir avec un fichier non suivi appelépath/to/untracked-file
; plus toutes les autres modifications que vous auriez pu avoir à suivre les fichiers).Une autre possibilité pour un flux de travail à ce sujet serait quelque chose comme:
[Remarque: Comme mentionné dans un commentaire de @mancocapac, vous souhaiterez peut-être ajouter
--exclude-standard
à lagit ls-files
commande (donc,git ls-files -o --exclude-standard
).]... qui pourrait également être facilement scripté - même les alias feraient l'affaire (présentés dans la syntaxe zsh; ajustez selon les besoins) [aussi, j'ai raccourci le nom du fichier pour qu'il tienne tout sur l'écran sans faire défiler cette réponse; n'hésitez pas à remplacer un autre nom de fichier de votre choix]:
Notez que ce dernier pourrait être mieux comme un script shell ou la fonction, pour permettre les paramètres à fournir à
git stash
, au cas où vous ne voulez pas ,pop
maisapply
, et / ou si vous voulez être en mesure de spécifier une planque spécifique, plutôt que de prendre le dessus une. Peut-être que ceci (au lieu du deuxième alias ci-dessus) [espace blanc dépouillé pour tenir sans défilement; rajouter pour une lisibilité accrue]:Remarque : Dans ce formulaire, vous devez fournir un argument d'action ainsi que l'identifiant si vous allez fournir un identifiant de stash, par exemple
unstashall apply stash@{1}
ouunstashall pop stash@{1}
Lequel bien sûr vous mettriez dans votre
.zshrc
ou équivalent pour faire exister à long terme.J'espère que cette réponse sera utile à quelqu'un, tout rassembler dans une seule réponse.
la source
Sur git version 2.8.1: les travaux suivants me conviennent.
Pour enregistrer des fichiers modifiés et non suivis dans une cachette sans nom
Pour enregistrer des fichiers modifiés et non suivis dans la cachette avec un nom
Vous pouvez utiliser pop ou appliquer plus tard comme suit.
la source
git stash show
ne leur a pas montré. Lorsque j'ai essayégit stash apply
, j'ai obtenu "erreur: impossible de restaurer les fichiers non suivis de la cachette". Cependant, les fichiers ont à nouveau été répertoriés comme non suivis, mais les modifications apportées aux fichiers suivis n'ont pas été restaurées. Je pense que ces fichiers pourraient être restaurés individuellement en les retirant de la cachette, mais cette solution n'était pas ce que j'espérais.J'ai pu cacher uniquement les fichiers non suivis en faisant:
Le dernier fait apparaître la cachette des fichiers suivis, ne laissant ainsi que les fichiers non suivis cachés.
la source
git stash save -u
ne sauvegarde pas seulement lesuntracked
fichiers, il enregistre à la fois letracked
etuntracked
. Je pense que la première sauvegarde que vous faites n'est pas nécessaire dans ce cas. Il y a un bon schéma atlassian.com/git/tutorials/saving-changes/...Si vous voulez cacher des fichiers non suivis, mais conserver des fichiers indexés (ceux que vous êtes sur le point de valider par exemple), ajoutez simplement l'
-k
option (garder l'index) à la-u
la source
Vous pouvez simplement le faire avec la commande ci-dessous
ou
Pour en savoir plus sur git stash, visitez cet article (cliquez ici)
la source
supposons que le fichier nouveau et non suivi s'appelle: "views.json". si vous souhaitez changer de branche en cachant l'état de votre application, je tape généralement:
Alors:
Et ce serait caché. Ensuite, je peux simplement changer de branche avec
la source
Il y a plusieurs réponses correctes ici, mais je voulais souligner que pour les nouveaux répertoires entiers,
'git add path'
cela ne fonctionnera PAS . Donc, si vous avez un tas de nouveaux fichiers dans un chemin non suivi et faites ceci:cela se cachera avec le message suivant:
et si le chemin non suivi est le seul chemin que vous planquez, le cache "temp stash" sera un cache vide. La bonne façon consiste à ajouter le chemin complet, pas seulement le nom du répertoire (c'est-à-dire terminer le chemin par un '/'):
la source
J'ai pensé que cela pourrait être résolu en disant à git que le fichier existe, plutôt qu'en validant tout son contenu dans la zone de transit, puis en appelant
git stash
. Araqnid décrit comment faire le premier.ou
Cependant, ce dernier ne fonctionne pas:
la source
mon préféré car il enregistre également les fichiers que vous avez ajoutés et ne les avez pas mis en scène.
la source
J'ai rencontré un problème similaire lors de l'utilisation de Sourcetree avec des fichiers nouvellement créés (ils ne seraient pas non plus inclus dans la cachette).
Lorsque j'ai choisi pour la première fois «tout mettre en scène», puis ranger les composants nouvellement ajoutés où ils sont suivis et donc inclus dans la stash.
la source
J'avais l'habitude de réfléchir et de désirer la même fonctionnalité. Mais avec le temps, j'ai remarqué que ce n'était vraiment pas nécessaire. Lorsque vous planquez, vous pouvez laisser les nouveaux fichiers. Rien de "mauvais" ne peut leur arriver (lorsque vous extrayez quelque chose d'autre, git générera une erreur et n'écrasera pas le fichier non suivi existant)
Et comme généralement l'intervalle de temps entre le
git stash
et legit stash pop
est assez petit, vous aurez à nouveau rapidement besoin du fichier non suivi. Je dirais donc que l'inconvénient du fichier apparaissant pendantgit status
que vous travaillez sur quelque chose d'autre (entre legit stash
et legit stash pop
) est plus petit que l'inconvénient causé par le travail et l'attention qu'il faudrait autrement pour essayer d'ajouter le fichier non suivi à votre cachette.la source