J'ai des modifications à un fichier, en plus d'un nouveau fichier, et que vous souhaitez utiliser git stash pour les mettre à l'écart alors que je passe à une autre tâche. Mais git stash par lui-même caches seules les modifications apportées au fichier existant; le nouveau fichier reste dans mon arbre de travail, d'encombrer mon travail futur. Comment dois-je ranger ce sans traces de fichier?
Réponses
Trop de publicités?Ajouter (git add
le fichier et commencer le suivi. Puis les ranger. Depuis la totalité du contenu du fichier sont nouveaux, ils seront planqué, et vous pouvez le manipuler comme nécessaire.
À partir de la version 1.7.7 vous pouvez utiliser git stash -u
de ranger sans traces de fichiers sans mise en scène.
Comme il a été dit ailleurs, la réponse est-à - git add
le fichier. par exemple:
git add path/to/untracked-file
git stash
Cependant, la question est également soulevée dans une autre réponse: Que faire si vous ne voulez pas vraiment à ajouter le fichier? Eh bien, autant que je peux dire, vous avez pour. Et la suite va PAS travailler:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
ce sera un échec, comme suit:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Alors, que pouvez-vous faire? Eh bien, vous avez vraiment ajouter le fichier, cependant, vous pouvez effectivement des nations unies-l'ajouter plus tard, avec git rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
Et puis, vous pouvez continuer à travailler, dans le même état que vous avez été avant l' git add
(c'est à dire avec un sans traces fichier appelé path/to/untracked-file
; en plus de toutes les autres modifications que vous pourriez avoir eu à dossiers).
Une autre possibilité pour un flux de travail sur ce serait quelque chose comme:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
... qui pourrait aussi être facilement script-même alias le ferait (présenté dans zsh la syntaxe; les ajuster au besoin) [aussi, j'ai raccourci le nom de fichier de sorte qu'il s'adapte à tous sur l'écran sans défilement dans cette réponse, n'hésitez pas à remplacer un autre nom de fichier de votre choix]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
A noter que ce dernier peut-être mieux comme un shell script ou de la fonction, afin de permettre les paramètres devant être fournis à l' git stash
, dans le cas où vous ne voulez pas pop
mais apply
, et/ou si vous voulez être en mesure de préciser une cachette, plutôt que de simplement prendre le dessus. Peut-être cela (au lieu de la deuxième alias, ci-dessus) [espace dépouillé de sans défilement; ajouter de nouveau pour augmenter la lisibilité]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Remarque: Dans ce formulaire, vous devez fournir un argument d'action ainsi que l'identifiant si vous allez à fournir une cachette identificateur, par exemple, unstashall apply stash@{1}
ou unstashall pop stash@{1}
Qui, bien sûr, vous mettriez dans votre .zshrc
ou l'équivalent, pour faire exister à long terme.
J'espère que cette réponse est utile à quelqu'un, de tout mettre ensemble dans une seule réponse.
Il y a plusieurs bonnes réponses ici, mais je tenais à préciser que pour les nouveaux répertoires entiers, 'git add path'
aura PAS de travail. Donc, si vous avez un tas de nouveaux fichiers sans traces de chemin et de faire cela:
git add untracked-path
git stash "temp stash"
cela permettra de ranger avec le message suivant:
Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty
et si non chaînée-chemin d'accès est le seul chemin que vous êtes en cachant, la cachette "temp stash" sera vide cachette. Bonne façon est d'ajouter le chemin d'accès complet, et pas seulement le nom du répertoire (c'est à dire en fin de chemin avec un '/'):
git add untracked-path/
git stash "temp stash"