git stash适用版本


512

我有2个分支:大师| 设计

在设计工作中,我做了一个秘密工作,然后转而使用母版,进行了一些调整。切换回设计,并且stash apply只做一次丢失了我在设计分支中的所有更改。

我希望我所有的工作都在一个藏匿处,因为我还没有清除或删除它们。

如果我存储列表,我会得到4个结果:

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

如果我尝试git stash apply f2c0c72出现错误:

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

如何应用特定的存储?


26
请注意,您现在拥有(Q4 2016,Git 2.11)语法git stash apply 0(而不是git stash apply stash@{0})。在这里查看我的答案
VonC

Answers:


836

藏匿处的钥匙实际上stash@{n}是左侧的物品。因此,请尝试:

git stash apply stash@{0}

(请注意,在某些shell中需要引用"stash@{0}",例如zsh,fish和powershell)。

从2.11版开始,这非常简单,您可以使用N堆栈号代替stash@{n}。所以现在不使用:

git stash apply "stash@{n}"

您可以输入:

git stash apply n

要获取存储清单:

git stash list

实际上stash@{0}是git的一个修订版本,您可以切换到...,但是git stash apply ...应该弄清楚如何使用DTRT将其应用于您的当前位置。


90
请注意,在某些shell上,必须引用stash @ {n}。
Senjai

7
另一个提示:您可以执行例如gitk stash@{0}显示在特定存储区中所做的更改。
antinome

11
zsh用户需要双引号,例如git stash apply "stash@{0}"
mynameistechno

7
stash@{n}是最难输入的命令。除了创建自己的别名或函数之外,还有其他快捷方式吗?
Dylanthepiguy '16

2
git stash apply n是和平的
维克多

240

要应用存储并将其从存储列表中删除,请运行:

git stash pop stash@{n}

要应用存储并将其保存在存储缓存中,请运行:

git stash apply stash@{n}

8
太好了,谢谢您区分这两个选项。我只是尝试了一下,看来,如果您将存储从分支a弹出到分支b,该存储仍将保留在存储缓存中。我想那将是这样,您仍然可以选择在将来的某个日期弹出/将隐藏项应用到branch-a。真希望那是有道理的。便利!
隆达

42
对于PowerShell:git stash pop "stash@{n}"
ankitjaininfo 2014年

1
PowerShell只对大括号/单引号花括号感到满意:git stash apply stash@"{n}"
m1kael

PowerShell也将接受git stash apply stash@`{n`}(在花括号前注意反引号)。
伊恩·坎普

52

从2.11版开始,这非常简单,您可以使用N堆栈号而不用说"stash@{n}"。所以现在不使用:

git stash apply "stash@{n}"

您可以输入:

git stash apply n

例如,在您的列表中:

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

如果您想申请stash@{1},可以输入:

git stash apply 1

否则,即使自1.7.5.1版以来您的目录中有一些更改,也可以使用它,但是您必须确保存储区不会覆盖工作目录中的更改,如果这样做会出现错误:

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

在1.7.5.1之前的版本中,如果工作目录中有更改,它拒绝工作。


Git发行说明:

用户在存储区的默认位置命名单个元素(即,refs / stash中的reflog)时,总是必须说“ stash @ {$ N}”。“ git stash”命令学会了接受“ git stash apply 4”作为“ git stash apply stash @ {4}”的简写

git stash apply”用于拒绝工作,即使工作树中有任何更改,即使更改与记录的存储没有重叠也是如此


41

如果在Windows机器上和PowerShell中,则需要用引号引起来,例如:

git stash apply "stash@{0}"

...或应用更改并从存储中删除:

git stash pop "stash@{0}"

否则,如果没有引号,您可能会收到此错误:

致命:参数'stash @'模棱两可:未知修订或不在工作树中的路径。


显然,这也是在Mac OSX 10.11上使用fish shell时必须执行的操作。
2015年

8
git stash list

然后选择要应用的存储区并仅使用数字:

git stash apply 1

2
Git Stash list 

列表将显示所有存放的物品,例如:stash @ {0} :, stash @ {1}:,..,stash @ {n}:

然后选择表示stash @ {n}的数字n:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.