522

I just upgraded Git. I'm on Git version 1.8.3.

This morning I tried to unstash a change 1 deep in the stack.

I ran git stash pop stash@{1} and got this error.

fatal: ambiguous argument 'stash@1': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git [...] -- [...]'

I've tried about 20+ variations on this as well as using apply instead of pop with no success. What's changed? Anyone else encounter this?

4b0
  • 21,981
  • 30
  • 95
  • 142
Jesse Atkinson
  • 10,586
  • 13
  • 42
  • 45

10 Answers10

692
git stash apply n

works as of git version 2.11

Original answer, possibly helping to debug issues with the older syntax involving shell escapes:

As pointed out previously, the curly braces may require escaping or quoting depending on your OS, shell, etc.

See "stash@{1} is ambiguous?" for some detailed hints of what may be going wrong, and how to work around it in various shells and platforms.

git stash list
git stash apply stash@{n}

git stash apply version

Bob Gilmore
  • 12,608
  • 13
  • 46
  • 53
  • 42
    My only nit with this answer is that the question asks how to `pop` a specific stash and this command `apply`s the stash rather than popping it. The difference being that a pop both applies the stash to the code and deletes the stash itself. – Grant Humphries Feb 16 '18 at 20:00
  • Not working for me. Getting error "unknown option: -encodedCommand" – Yuvraj Patil Mar 12 '18 at 06:30
  • 21
    [Since the version 2.11 you can type:](https://stackoverflow.com/questions/1910082/git-stash-apply-version/44451133#44451133) `git stash apply n` – Dwhitz Apr 05 '18 at 12:49
  • 1
    Also, you can type `git stash pop ''` where stash-ref is like `stash{0}`. Don't forget the quotes – A G Oct 26 '22 at 09:49
  • This also works for commands like `git stash show 1`, which will do `git stash show` with the *second* item on the stash stack – FreelanceConsultant Jan 10 '23 at 15:41
233

You need to escape the braces:

git stash pop stash@\{1\}
isherwood
  • 58,414
  • 16
  • 114
  • 157
Vasiliy
  • 16,221
  • 11
  • 71
  • 127
151

If you want to be sure to not have to deal with quotes for the syntax stash@{x}, use Git 2.11 (Q4 2016)

See commit a56c8f5 (24 Oct 2016) by Aaron M Watson (watsona4).
(Merged by Junio C Hamano -- gitster -- in commit 9fa1f90, 31 Oct 2016)

stash: allow stashes to be referenced by index only

Instead of referencing "stash@{n}" explicitly, make it possible to simply reference as "n".
Most users only reference stashes by their position in the stash stack (what I refer to as the "index" here).

The syntax for the typical stash (stash@{n}) is slightly annoying and easy to forget, and sometimes difficult to escape properly in a script.

Because of this the capability to do things with the stash by simply referencing the index is desirable.

So:

git stash drop 1
git stash pop 1
git stash apply 1
git stash show 1
Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
73

Update

From git 2.11 just use the number:

git stash apply 1

Orginal

On Windows Powershell I run this:

git stash apply "stash@{1}"
Robert Brooker
  • 2,148
  • 24
  • 22
18

As Robert pointed out, quotation marks might do the trick for you:

git stash pop stash@"{1}"
owenmck
  • 388
  • 3
  • 9
15

If none of the above work, quotation marks around the stash itself might work for you:

git stash pop "stash@{0}"
Kenan
  • 13,156
  • 8
  • 43
  • 50
13

I have 2.22 installed and this worked..

git stash pop --index 1
markg
  • 319
  • 4
  • 10
  • It doesn't work.. $ git stash pop --index 1 fatal: ambiguous argument '1': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git [...] -- [...]' – Dave Doga Oz Apr 17 '20 at 17:52
  • warning on Poping your stashes – shervinox Dec 18 '20 at 22:04
10

Version 2.11+ use the following:

git stash list

git stash apply n

n is the number stash@{12}

manish kumar
  • 4,412
  • 4
  • 34
  • 51
9

First check the list:-

git stash list

copy the index you wanted to pop from the stash list

git stash pop stash@{index_number}

eg.:

git stash pop stash@{1}
Vaibhav Vishal
  • 6,576
  • 7
  • 27
  • 48
Jabbi Syed
  • 161
  • 2
  • 3
3

I've seen this answer a few times in this list, but just to be explicitly clear, at least as of git version 2.33.0, git stash pop stash@{n} is valid. No escaping necessary.

PaulBunion
  • 346
  • 2
  • 18