【问题标题】:git stash apply versiongit stash 应用版本
【发布时间】:2010-12-26 23:23:46
【问题描述】:

我有 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

如何应用特定的存储?

【问题讨论】:

  • 请注意,您现在(2016 年第四季度,Git 2.11)拥有语法 git stash apply 0(而不是 git stash apply stash@{0})。见my answer here

标签: git git-stash


【解决方案1】:

进入 stash 的键实际上是左侧的 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 将其应用到您当前的位置。

【讨论】:

  • 请注意,在某些 shell 上,必须引用 stash@{n}。
  • 另一个提示:你可以做例如gitk stash@{0} 显示您在特定存储中所做的更改。
  • zsh 用户需要双引号,例如git stash apply "stash@{0}"
  • stash@{n} 是最难输入的命令。除了创建自己的别名或函数之外,还有什么捷径可以做到这一点吗?
  • git stash apply n 很平静
【解决方案2】:

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

git stash pop stash@{n}

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

git stash apply stash@{n}

【讨论】:

  • 这很好,感谢您区分这两个选项。我刚刚尝试过,似乎如果您将一个存储从分支-a 弹出到分支-b,则该存储仍将保留在存储缓存中。我想那是这样,您仍然可以选择在未来某个日期将存储区弹出/应用到分支-a。真的希望这是有道理的。好用!
  • 对于 PowerShell:git stash pop "stash@{n}"
  • PowerShell 对引号/单引号中的大括号很满意:git stash apply stash@"{n}"
  • PowerShell 也将接受git stash apply stash@`{n`}(注意大括号前的反引号)。
【解决方案3】:

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

git stash apply "stash@{0}"

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

git stash pop "stash@{0}"

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

致命:不明确的参数“stash@”:未知修订或路径不在 工作树。

【讨论】:

  • 显然这也是在 Mac OSX 10.11 上使用 fish shell 时必须这样做的方式。
【解决方案4】:

从 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" 用于拒绝工作,如果有任何变化 工作树,即使更改没有与更改重叠 藏匿记录

【讨论】:

    【解决方案5】:

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

    git stash list
    

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

    git stash apply n
    

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

    【讨论】:

      【解决方案6】:
      git stash list 
      

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

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

      git stash apply n 
      

      例如:

      git stash apply 1 
      

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

      【讨论】:

        【解决方案7】:

        只是让初学者简单易懂。

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

        git stash list
        

        然后使用以下命令申请:

        git stash apply stash@{n}
        

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

         git stash apply stash@{0}
        

        【讨论】:

        • 这基本上和许多以前的答案说的一样。
        猜你喜欢
        • 2013-12-22
        • 1970-01-01
        • 2020-06-01
        • 2014-03-11
        • 2013-03-26
        • 2017-11-25
        • 2013-02-23
        • 1970-01-01
        相关资源
        最近更新 更多