我有2个分支:主|设计

在设计工作中,我做了一个隐藏,然后切换到master,做了一些调整。切换回设计,并做了一个隐藏应用,只失去我在设计分支的所有更改。

我希望我所有的工作都在一个藏起来,因为我没有清除或删除这些。

如果我做一个收藏清单,我会得到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应用f2c0c72,我得到一个错误:

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

我如何应用特定的收藏?


进入隐藏的键实际上是左边的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应用…你应该弄清楚如何将DTRT应用到你当前的位置。


要应用一个收藏并将其从收藏列表中移除,运行:

git stash pop stash@{n}

要应用一个stash并将其保存在stash缓存中,运行:

git stash apply stash@{n}

如果是在Windows机器和PowerShell中,则需要引用参数,例如:

git stash apply "stash@{0}"

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

git stash pop "stash@{0}"

否则如果没有引号,你可能会得到这样的错误:

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


从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之后有了一些更改,你也可以使用它,但你必须确保stash不会覆盖你的工作目录更改,如果它覆盖了,你会得到一个错误:

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

发行说明2.11

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

发布说明1.7.5.1

Git stash apply”用来拒绝工作,如果有任何变化 工作树,即使变更时没有与变更重叠 藏记录


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

git stash list

然后选择存储应用和只使用数字:

git stash apply n

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


git stash list 

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

然后选择数字n,表示存储@{n}:

git stash apply n 

例如:

git stash apply 1 

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


如果你有更多的存储,我建议你在应用它们之前检查一下。使用:

git stash show -p

去看最后一个藏货的细节。如果你有更多的藏匿点,你想要一个特定的藏匿点,然后在最后添加一些藏匿点:

git stash show 1

然后当你找到合适的收藏应用它输入:

git stash apply 1

同样,数字是一个没有数字的例子,你会应用最后一个。


您需要引用字符串,因为shell将{}的内容作为展开。所以使用git stash apply 'stash@{index}'。或者,您可以使用存储的SHA,或者下次应用它时,您可以自己命名存储。