688

我有 2 个分支:master | 设计

在设计工作我做了一个藏匿并切换到大师,做了一些调整。切换回设计并做了一个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

如何应用特定的存储?

4

7 回答 7

1164

进入储藏室的钥匙实际上是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 将其应用到您当前的位置。

于 2009-12-15T20:23:52.083 回答
272

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

git stash pop stash@{n}

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

git stash apply stash@{n}
于 2009-12-15T20:28:46.180 回答
66

从 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 发行说明:

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

git stash apply" 用于在工作树发生任何更改时拒绝工作,即使更改与存储记录的更改不重叠

于 2017-06-09T06:49:33.787 回答
42

如果一个在 Windows 机器上并在 PowerShell 中,则需要引用参数,例如:

git stash apply "stash@{0}"

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

git stash pop "stash@{0}"

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

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

于 2015-10-16T16:43:35.873 回答
17
git stash list 

列表将显示所有隐藏的项目,例如:stash@{0}:,stash@{1}:,..,stash@{n}:

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

git stash apply n 

例如:

git stash apply 1 

会将特定的隐藏更改应用到当前分支

于 2019-07-09T13:50:45.627 回答
12

查看您最近的工作以及它在运行时发生的分支

git stash list

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

git stash apply n

其中n(在上面的示例中)是与正在进行的工作相对应的数字。

于 2019-05-05T09:14:32.750 回答
4

只是让初学者简单易懂。

使用以下命令检查您的 git 存储列表:

git stash list

然后使用以下命令应用:

git stash apply stash@{n}

例如:我正在应用我的最新存储(最新的始终是存储列表顶部的索引 {0})。

 git stash apply stash@{0}
于 2020-06-15T10:49:49.433 回答