stash git aplicar versão

513

Eu tenho 2 ramos: mestre | Projeto

Trabalhando em design, fiz um stash e mudei para master, fiz alguns ajustes. Voltei ao design e fiz stash applyapenas uma perda de todas as minhas alterações no ramo de design.

Espero que todo o meu trabalho esteja dentro de um esconderijo, pois não os apaguei ou removi.

Se eu fizer uma lista stash, obtenho 4 resultados:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Se eu tentar git stash apply f2c0c72, estou recebendo um erro:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Como posso aplicar um esconderijo específico?

Lee
fonte
26
Observe que você tem agora (quarto trimestre de 2016, Git 2.11) a sintaxe git stash apply 0(em vez de git stash apply stash@{0}). Veja minha resposta aqui .
VonC 11/11/19

Respostas:

839

As chaves do esconderijo são na verdade os stash@{n}itens à esquerda. Então tente:

git stash apply stash@{0}

(observe que em algumas conchas você precisa citar "stash@{0}", como zsh, fish e powerhell).

Desde a versão 2.11, é bem fácil, você pode usar o número da pilha N em vez de usá-lo stash@{n}. Então agora, em vez de usar:

git stash apply "stash@{n}"

Você pode digitar:

git stash apply n

Para obter a lista de stashes:

git stash list

De fato, stash@{0}é uma revisão no git que você pode alternar para ... mas git stash apply ...deve descobrir como usar o DTRT para aplicá-lo ao seu local atual.

araqnid
fonte
90
Apenas observe que, em algumas conchas, stash @ {n} deve ser citado.
Senjai
7
Outra dica: você pode fazer, por exemplo, gitk stash@{0}mostrar as alterações feitas em um estoque específico.
Antinome
11
Os usuários do zsh precisam de aspas duplas, por exemplo,git stash apply "stash@{0}"
mynameistechno
7
stash@{n}é o comando mais complicado de digitar. Existem atalhos para fazer isso além de criar seu próprio alias ou função?
Dylanthepiguy
2
git stash apply né pacífico
Victor
241

Para aplicar um stash e removê-lo da lista de stash, execute:

git stash pop stash@{n}

Para aplicar um stash e mantê-lo no cache stash, execute:

git stash apply stash@{n}
Dan Loewenherz
fonte
8
Isso é ótimo, obrigado por distinguir entre as duas opções. Eu apenas tentei isso e parece que, se você colocar um stash do ramo-a no ramo-b, o stash ainda permanecerá no cache do stash. Eu acho que seria assim você ainda tem a opção de aplicar pop / stash na ramificação-a em uma data futura. Realmente espero que isso faça sentido. Handy!
Longda
42
Para PowerShell:git stash pop "stash@{n}"
ankitjaininfo 04/04
1
Feliz do PowerShell com as cintas apenas encaracolados em citações / aspas simples:git stash apply stash@"{n}"
m1kael
O PowerShell também aceita git stash apply stash@`{n`}(observe os backticks antes dos aparelhos).
Ian Kemp
52

Desde a versão 2.11, é bem fácil, você pode usar o número da pilha N em vez de dizer "stash@{n}". Então agora, em vez de usar:

git stash apply "stash@{n}"

Você pode digitar:

git stash apply n

Por exemplo, na sua lista:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Se você deseja se inscrever, stash@{1}pode digitar:

git stash apply 1

Caso contrário, você poderá usá-lo mesmo se tiver algumas alterações no diretório desde 1.7.5.1, mas você deve ter certeza de que o stash não substituirá as alterações no diretório de trabalho, se isso ocorrer, você receberá um erro:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

Nas versões anteriores à 1.7.5.1, recusava-se a funcionar se houvesse uma alteração no diretório de trabalho.


Notas de versão do Git:

O usuário sempre deve dizer "stash @ {$ N}" ao nomear um único elemento no local padrão do stash, ou seja, reflogs em refs / stash. O comando "git stash" aprendeu a aceitar "git stash apply 4" como uma abreviação de "git stash apply stash @ {4}"

git stash apply "usado para se recusar a trabalhar se houver alguma alteração na árvore de trabalho, mesmo quando a alteração não se sobrepõe à alteração registrada no stash

Pau
fonte
41

Se alguém estiver em uma máquina Windows e no PowerShell, será necessário citar o argumento, como:

git stash apply "stash@{0}"

... ou para aplicar as alterações e remover do esconderijo:

git stash pop "stash@{0}"

Caso contrário, sem as aspas, você poderá receber este erro:

fatal: argumento ambíguo 'stash @': revisão desconhecida ou caminho fora da árvore de trabalho.

jterry
fonte
Aparentemente, é assim que você deve fazer isso ao usar o shell de peixe no Mac OSX 10.11.
Lps
8
git stash list

selecione o esconderijo a ser aplicado e use apenas o número:

git stash apply 1
panthari
fonte
2
Git Stash list 

A lista mostrará todos os itens ocultos, por exemplo: stash @ {0} :, stash @ {1}:, .., stash @ {n}:

Em seguida, selecione o número n que indica stash @ {n}:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
Harshavardhan reddy.
fonte