Come è stato detto altrove, la risposta è al git add
file. per esempio:
git add path/to/untracked-file
git stash
Tuttavia, la domanda viene sollevata anche in un'altra risposta: cosa succede se non si desidera davvero aggiungere il file? Beh, per quanto posso dire, devi farlo. E quanto segue NON funzionerà:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
questo fallirà, come segue:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Che cosa si può fare? Bene, devi davvero aggiungere il file, tuttavia , puoi effettivamente annullarlo in seguito, con 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
E poi puoi continuare a lavorare, nello stesso stato in cui ti git add
trovavi prima (ovvero con un file non tracciato chiamatopath/to/untracked-file
non tracciato ; oltre a qualsiasi altra modifica che potresti aver dovuto tenere traccia dei file).
Un'altra possibilità per un flusso di lavoro su questo sarebbe qualcosa di simile:
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
[Nota: come menzionato in un commento di @mancocapac, potresti voler aggiungere --exclude-standard
al git ls-files
comando (quindi,git ls-files -o --exclude-standard
).]
... che potrebbe anche essere facilmente copiato - anche gli alias lo farebbero (presentati nella sintassi di zsh; regolare secondo necessità) [inoltre, ho abbreviato il nome del file in modo che si adatti allo schermo senza scorrere in questa risposta; sentiti libero di sostituire un nome file alternativo di tua scelta]:
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'
Si noti che quest'ultimo potrebbe essere migliore come script di shell o funzione, per consentire ai parametri di essere forniti git stash
, nel caso in cui non si desideri pop
ma apply
, e / o si desideri poter specificare uno stash specifico, piuttosto che prendere semplicemente la parte superiore uno. Forse questo (al posto del secondo alias, sopra) [spazi bianchi ridotti per adattarsi senza scorrere; aggiungere nuovamente per una maggiore leggibilità]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Nota : in questo modulo, è necessario fornire un argomento di azione e l'identificatore se si intende fornire un identificatore di scorta, ad es. unstashall apply stash@{1}
Ounstashall pop stash@{1}
Quale ovviamente avresti inserito nel tuo .zshrc
o equivalente per far esistere a lungo termine.
Spero che questa risposta sia utile a qualcuno, mettendo tutto insieme in un'unica risposta.
git stash show
non restituisce nulla e potresti essere tentato di rilasciarlo (come ho appena fatto mentre conteneva uno script utile che ho scritto alcuni mesi fa → come recuperare una scorta abbandonata )