para arquivo único , em vez de manipular comandos stash, uma abordagem muito mais fácil é copiar um arquivo e quando você deseja trazê-lo de volta para simplesmente copiar o original. por exemplo. cp just_my_file.txt just_my_file.txt.manualstash agora você pode fazer todos os check-outs e outras coisas e, como a cópia é "arquivo não rastreado", é possível mover-se pelas ramificações e confirmar sem problemas. Quando você está no ramo direito / commit onde você quer "mesclar o único arquivo" apenas fazer mv just_my_file.txt.manualstash just_my_file.txte agora você pode rever as alterações e confirmá-lo quando necessário
Dimitry K
Respostas:
173
Acho que stash -pé provavelmente a escolha que você deseja, mas, caso encontre outras coisas ainda mais complicadas no futuro, lembre-se:
Stashé realmente apenas uma alternativa muito simples aos conjuntos apenas um pouco mais complexos branch. O Stash é muito útil para mover as coisas rapidamente, mas você pode realizar coisas mais complexas com ramificações sem muito mais dor de cabeça e trabalho.
faça o que quiser e depois simplesmente rebasee / ou mergeo tmpbranch. Realmente não é que muito trabalho extra quando você precisa fazer monitoramento mais cuidadoso do estoque permitirá.
Esta resposta parece ser o mais para a frente para mim quando tomada alterar alterações: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey
1
Eu acho que isso deve contar com algumas funcionalidades muito novas. Não funciona no git 2.1.4.
Richard Smith
Isso resulta em um comportamento estranho para mim, com o stash sendo salvo, mas os mesmos arquivos sendo adicionados à preparação ao mesmo tempo (git v2.20.1),
paradroid
58
Você pode esconder interativamente linhas únicas com git stash -p(análogo a git add -p).
Não é necessário um nome de arquivo, mas você pode pular outros arquivos daté chegar ao arquivo que deseja esconder e que todas as alterações nele ocultam a.
Isso leva muito tempo se você tiver muitos arquivos que não deseja ocultar.
Jjj #
23
eu não sei quando isso mudou, mas como de git 2.14.1você pode especificar o nome do arquivogit stash -p <filename>
múon
21
A melhor opção é git stash save --keep-indexpreparar tudo, menos esse arquivo, e dizer ao stash para manter o índice , escondendo assim o arquivo não estático:
Como Dan aponta, thefiletostashé o único a ser redefinido pelo stash, mas também oculta os outros arquivos, portanto, não é exatamente o que você deseja.
Embora isso mantenha o índice no mesmo estado, isso também não esconde os arquivos que estão no índice? Em outras palavras, se depois de fazer isso você confirmar o índice para a ramificação atual, alterne para outra ramificação e faça git stash pop, não aplicará todos os arquivos, não apenas o que queremos esconder?
Dan Molding
@ DanMoulding: você está absolutamente certo, eu não pensei sobre isso.
precisa saber é o seguinte
16
Caso você realmente queira dizer 'descartar alterações' sempre que usar 'git stash' (e realmente não usar git stash para esconder temporariamente), nesse caso, você pode usar
git checkout -- <file>
Observe que o git stash é apenas uma alternativa mais rápida e simples para ramificar e fazer coisas.
Eu acho que essa é a melhor resposta se você deseja remover todas as alterações modificadas em um único arquivo.
Mohamed Haseel 11/02
e eu gostaria de esta é a melhor resposta para essa tarefa em particular
Zakir Hussain
6
A pergunta era clara o suficiente e não perguntou como reverter as alterações em um arquivo. Votado.
Richard Smith
Esta é uma boa resposta, mostrando claramente como uma alternativa. Mas algumas pessoas será suficiente teimoso usar downvote como recurso de abusar: +1
Mukul Jain
@MukulJain Na verdade, eu precisava usar o stash por arquivo de maneira muito temporária (basicamente separando algumas alterações em dois commits que afetavam as mesmas linhas, para um arquivo). Na verdade, não vou votar, apenas declarar que é inútil para mim.
cp just_my_file.txt just_my_file.txt.manualstash
agora você pode fazer todos os check-outs e outras coisas e, como a cópia é "arquivo não rastreado", é possível mover-se pelas ramificações e confirmar sem problemas. Quando você está no ramo direito / commit onde você quer "mesclar o único arquivo" apenas fazermv just_my_file.txt.manualstash just_my_file.txt
e agora você pode rever as alterações e confirmá-lo quando necessárioRespostas:
Acho que
stash -p
é provavelmente a escolha que você deseja, mas, caso encontre outras coisas ainda mais complicadas no futuro, lembre-se:Stash
é realmente apenas uma alternativa muito simples aos conjuntos apenas um pouco mais complexosbranch
. O Stash é muito útil para mover as coisas rapidamente, mas você pode realizar coisas mais complexas com ramificações sem muito mais dor de cabeça e trabalho.faça o que quiser e depois simplesmente
rebase
e / oumerge
o tmpbranch. Realmente não é que muito trabalho extra quando você precisa fazer monitoramento mais cuidadoso do estoque permitirá.fonte
Se você não deseja especificar uma mensagem com suas alterações ocultas, passe o nome do arquivo após um traço duplo.
Se for um arquivo não rastreado / novo, você precisará prepará-lo primeiro.
No entanto, se você não deseja especificar uma mensagem, use
push
.Ambos os métodos funcionam nas versões git 2.13+
fonte
git stash -- filename.ext
,git commit --amend
,git stash pop
Você pode esconder interativamente linhas únicas com
git stash -p
(análogo agit add -p
).Não é necessário um nome de arquivo, mas você pode pular outros arquivos daté chegar ao arquivo que deseja esconder e que todas as alterações nele ocultam a.
fonte
git 2.14.1
você pode especificar o nome do arquivogit stash -p <filename>
A melhor opção é
git stash save --keep-index
preparar tudo, menos esse arquivo, e dizer ao stash para manter o índice , escondendo assim o arquivo não estático:Como Dan aponta,
thefiletostash
é o único a ser redefinido pelo stash, mas também oculta os outros arquivos, portanto, não é exatamente o que você deseja.fonte
git stash pop
, não aplicará todos os arquivos, não apenas o que queremos esconder?Caso você realmente queira dizer 'descartar alterações' sempre que usar 'git stash' (e realmente não usar git stash para esconder temporariamente), nesse caso, você pode usar
Observe que o git stash é apenas uma alternativa mais rápida e simples para ramificar e fazer coisas.
fonte