2016-06-21 1 views
7

Je ne suis pas un grand expert chez git mais je l'utilise depuis quelques années. Dernièrement, j'ai remarqué un comportement étrange relatif à la dissimulation. Il semble ne travailler que partiellement pour moi.Comment faire git stash inclure de nouveaux fichiers qui n'ont pas été mis en scène?

Par exemple aujourd'hui j'ai essayé de stocker 4 changements non validés. 1 fichier a été ajouté à la cachette, les 3 restants sont restés comme des changements non validés. Je l'ai essayé deux fois et après la première tentative, je recevais juste "Aucun changement local à sauvegarder", mais le statut affichait toujours les 3 changements non validés.

Cependant, par coïncidence, j'ai trouvé que lorsque je faisais des changements auparavant inabordables, ils étaient rangés normalement. J'ai joué autour et c'est reproductible: Si tous les changements sont non validés, seul le changement est caché. Si les changements de "problème" sont mis en scène alors tous les changements sont stockés (peu importe que le "bon" changement soit mis en scène ou non, il sera toujours stocké).

Est-ce un bug ou est-ce que je fais quelque chose de mal? J'utilise Git pour Windows 2.8.2 et Git Extensions 2.48.05.

Peu importe que j'essaie de stocker les modifications via l'interface graphique Git Extensions ou via la console.

EDIT: Si j'établis les 4 changements avant de les stocker, quand je fais un pop de stockage, les 3 changements de problèmes sont mis en scène, comme avant, mais le bon changement, qui stash toujours, est non engagé. Donc, la pop stash ne fait pas le tour de l'état à la façon dont il était avant la cachette. C'est répétable aussi bien.

+4

Peut-être que les fichiers qui ne sont pas mis en scène ne sont pas suivis par Git? Essayez 'git stash -u' –

+2

@ Jonathan.Brink: C'est la réponse. Les changements qui ne seraient pas stockés étaient de nouveaux fichiers, pas encore suivis. J'ai mis le drapeau -u et ils ont caché sans problèmes. Si vous voulez faire une réponse, je l'accepterai. –

Répondre

13

Le problème semble être que, par défaut, la commande stash n'inclut pas les fichiers non suivis.

Pour inclure des fichiers non suivis, utilisez le -u (--include-untracked) Drapeau:

git stash -u 

Si l'option de --include-untracked est utilisé, tous les fichiers sont trassez également planqué puis nettoyé avec git clean, laissant le répertoire de travail dans un état très propre.

+5

comme mentionné dans les réponses à [cette question précédente] (http://stackoverflow.com/questions/835501/how-do-you-stash-an-untracked-file), en utilisant 'git stash -u' ** will [ supprimer définitivement les dossiers ignorés] (https://gitlab.com/tortoisegit/tortoisegit/issues/1200) ** – phillchill