Como já foi dito em outros lugares, a resposta está git add
no arquivo. por exemplo:
git add path/to/untracked-file
git stash
No entanto, a questão também é levantada em outra resposta: E se você realmente não quiser adicionar o arquivo? Bem, até onde eu sei, você precisa. E o seguinte NÃO funcionará:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
isso falhará, da seguinte maneira:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Então o que você pode fazer? Bem, você precisa realmente adicionar o arquivo, no entanto , pode efetivamente descompactá-lo posteriormente, com 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 então você pode continuar trabalhando, no mesmo estado em que estava antes do git add
(ou seja, com um arquivo path/to/untracked-file
não rastreado chamado ; além de outras alterações que você possa ter tido nos arquivos rastreados).
Outra possibilidade para um fluxo de trabalho sobre isso seria algo como:
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: Como mencionado em um comentário de @mancocapac, você pode adicionar --exclude-standard
um git ls-files
comando (assim, git ls-files -o --exclude-standard
).]
... que também poderia ser facilmente roteirizado - até mesmo os aliases (apresentados na sintaxe zsh; ajustam conforme necessário) [também reduzi o nome do arquivo para que ele caiba na tela sem rolar nesta resposta; fique à vontade para substituir um nome de arquivo alternativo de sua escolha]:
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'
Observe que o último pode ser melhor como um script ou função de shell, para permitir que os parâmetros sejam fornecidos git stash
, caso você não queira , pop
mas apply
/ ou queira especificar um stash específico, em vez de apenas assumir o topo 1. Talvez este (em vez do segundo apelido acima) [espaço em branco tenha sido ajustado para caber sem rolagem; adicione novamente para maior legibilidade]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Nota : Neste formulário, você precisa fornecer um argumento de ação e o identificador se for fornecer um identificador de stash, por exemplo, unstashall apply stash@{1}
ouunstashall pop stash@{1}
Qual, é claro, você colocaria no seu .zshrc
ou equivalente para que exista a longo prazo.
Espero que esta resposta seja útil para alguém, reunindo tudo em uma única resposta.
git stash show
não retorna nada e você pode ficar tentado a descartá-lo (como eu acabei de fazer enquanto continha um script útil que escrevi há alguns meses atrás) → como recuperar um estoque caiu )