【问题标题】:How to delete a stash created with git stash create?如何删除使用 git stash create 创建的存储?
【发布时间】:2011-08-09 20:51:58
【问题描述】:

Git stash 似乎做了很多我想做的事情,只是编写脚本有点困难,因为如果你没有更改,那么 git stash; git stash pop 会做一些不同于你在存储库中有更改的事情.

看来git stash create 是该问题的答案,并且一切正常,除了一件事……我无法摆脱创建的存储。有什么办法可以摆脱隐藏的?

为了让 100% 清楚我在做什么:

创建存储:

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

使用存储:

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

删除存储:(除了最后一点不起作用)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference

【问题讨论】:

  • 尽管时间上的距离很远,但我想向同行指出,在撰写本文时,在第二个代码框中运行的 git apply 没有应用补丁 - 中的错误消息输出告诉你这一点。所以实际上,您尝试创建一个存储(不起作用,请参见下面的 cmets)应用一个未创建的存储,然后删除一个未创建的存储。这就是为什么你什么都没做。
  • @ProfessorTom 存储已创建,这就是它返回哈希码的原因,以及 git stash apply 确实有效的原因。 git apply 尝试读取不存在的本地补丁文件。老实说,它可能只是不应该存在,而且它永远不会起作用。我隐约想把它从问题中删除,但鉴于它以目前的形式帮助了很多人,我将保持原样。

标签: git git-stash


【解决方案1】:

只删除一个存储git stash drop

删除所有存储git stash clear

展示你的藏匿处git stash show

删除特定的存储git stash drop indexnumber 例如git stash drop 4

【讨论】:

    【解决方案2】:
    git stash           // create stash,
    git stash push -m "message" // create stash with msg,
    git stash apply         // to apply stash,
    git stash apply indexno // to apply  specific stash, 
    git stash list          //list stash,
    git stash drop indexno      //to delete stash,
    git stash pop indexno,
    git stash pop = stash drop + stash apply
    git stash clear         //clear all your local stashed code
    

    【讨论】:

      【解决方案3】:

      Git stash clear 将清除完整的存储,

      cmd: git stash clear

      如果您想删除带有存储索引的特定存储,您可以使用 drop。

      cmd: git stash drop 4

      (4 是存储 ID 或存储索引)

      【讨论】:

        【解决方案4】:

        git stash drop 不带任何参数 - 它会删除顶部存储 - 或一个类似于以下内容的存储引用:stash@{n} 其中n 指定要删除的存储。您不能将提交 ID 传递给 git stash drop

        git stash drop            # drop top hash, stash@{0}
        git stash drop stash@{n}  # drop specific stash - see git stash list
        

        删除存储将更改所有存储在堆栈下方的stash@{n} 名称。

        我不确定您为什么认为需要删除存储,因为如果您使用 stash create,则不会为您的“存储”创建存储条目,因此没有任何东西可以删除。

        【讨论】:

        • 查看 git stash 的手册页。 stash create 不创建条目,仅创建存储的提交对象,因此存储日志中没有要删除的条目。
        • From man: create 创建一个 stash(这是一个常规提交对象)并返回其对象名称,而不是将其存储在 ref 命名空间中的任何位置。
        • 警告:您可能不应该放弃像 1、2、3 这样的倍数,因为您实际上最终会放弃最初的数字 1、3 和 5。删除 1、2 和 3 的正确方法是按 3、2、1 或 1、1、1 的顺序执行它们。此外,它的索引为 0,0 位于堆栈的顶部。
        • Git Extensions 会在按下“Stash Changes”按钮时发出一个未知命令,并且在退出和重新启动应用程序时它所做的任何事情都会持续存在。没有明显的方法可以使用 GUI 删除存储,但是从命令行“git stash list”显示 WIP 存储,并且“git stash clear”摆脱它。
        • 如果您在 powershell 中执行此操作,请确保将 stash@{n} 用单引号括起来,否则会出现错误。
        【解决方案5】:

        如果您 100% 确定您只有一个存储区或者您想删除所有存储区(请设置 git stash list 以确保 107% 确定),您可以执行以下操作:

        git stash clear
        

        ..忘记它们(它会删除所有存储)。

        注意:为那些最终来到这里寻找清除所有问题的方法的人添加了这个答案(比如我)。

        【讨论】:

        • 如果你只有一个 stash,我仍然建议使用git stash drop,因为它只会丢弃一个 stash,而且你不必担心丢失超出预期。
        • 赞成,因为它实际上回答了这个问题,无论这样做是否是最佳做法。我实际上需要这个,因为我今天创建的存储需要消失。
        • 我已经使用 stash 很长时间了。然而,这一次我无法像往常一样通过简单地使用git stash drop 来摆脱我所做的最后一个存储。我不确定我做了什么不同的事情。无论如何,git stash clear 为我工作。不知道它的存在。 +1
        • +1 因为 git 拒绝删除存储,因为存储创建的文件之一现在已经存在..
        • 具体来说,107% 确定。
        【解决方案6】:

        文档在这里(中文)please click.

        你可以使用

        git 存储列表

        git stash drop stash@{0}

        【讨论】:

        • git stash creategit stash save 不同,特别是create 表单不显示在列表中,也不能删除,因此问题。
        • @PaulWagland 感谢您的回复并提供答案。老实说,我在官方文档中没有找到“git stash create”。但是关于这个,我很感兴趣。如果你想在“git stash list”中找到“git stash create”。您可以在上面执行此操作。
        • 谢谢!有用。 git stash drop stash@{0}
        【解决方案7】:

        要删除使用git stash 创建的普通存储,您需要git stash dropgit stash drop stash@{n}。有关详细信息,请参见下文。


        您无需删除使用git stash create 创建的存储。来自文档:

        创建一个存储条目(这是一个常规提交对象)并返回其对象名称,而不将其存储在 ref 命名空间中的任何位置。这旨在对脚本有用。它可能不是您要使用的命令;参见上面的“保存”。

        由于没有任何东西引用 stash 提交,它最终会被垃圾回收。


        使用git stashgit stash save 创建的存储被保存到refs/stash,并且可以使用git stash drop 删除。与所有 Git 对象一样,实际存储内容不会从您的计算机中删除,直到 gc 在这些对象过期后对其进行修剪(默认为 2 周后)。

        较旧的 stash 保存在 refs/stash reflog(试试 cat .git/logs/refs/stash)中,可以使用 git stash drop stash@{n} 删除,其中 ngit stash list 显示的数字。

        【讨论】:

        • 它没有回答名义上的问题。结果,像我这样的人,通过谷歌搜索问题的答案,并不特别关心实际细节,投票给实际回答的人。有些人还恶意拒绝接受的答案,因为这对他们没有帮助。我个人只是赞成对我有帮助的答案。
        • 所以:1)谷歌“git delete stash”2)根据问题标题的前半部分点击SO链接3)对标题后半部分的正确答案投反对票。这是一个新的。
        • @ArtOfWarfare 那将是缺乏阅读理解,因为这显然是对“名义问题”的回应。
        • 很公平。我只使用git stash 创建我的存储区——我不知道它是否真的映射到git stash create 或其他东西。 Git 确实是我仍在学习的东西(如果不是,我就不会阅读这样的 SO Q&As。)
        • @AdrianPronk 这正是我建议实际使用git stash create 的事情。与其保存在带时间戳的补丁文件中,不如让 git reflog 为您保存在自定义 ref 中(例如 refs/backup)。我会尝试类似 1) git stash create,2) 将新存储的树与 refs/backup^{tree} 进行比较,3) 如果树不同,git update-ref --create-reflog refs/backup &lt;stash-sha&gt;。最终旧的备份存储将被自动修剪。
        【解决方案8】:

        它也有效

        git stash drop <index>
        

        喜欢

        git stash drop 5
        

        【讨论】:

          【解决方案9】:

          来自 git 文档:http://git-scm.com/docs/git-stash

          删除 [-q|--quiet] []

          从存储列表中删除单个隐藏状态。如果没有给出,它会删除最新的。即stash@{0},否则必须是 stash@{} 形式的有效存储日志引用。

          示例:

          git stash drop stash@{5}
          

          这将删除存储条目 5。查看所有存储列表:

          git stash list
          

          【讨论】:

          • 除了我在问题的底部明确说 git stash drop 没有做我想要的。
          • 我建议在执行 git stash drop 之前使用 -git stash show stash@{REPLACE_IT_WITH_STASH_INDEX} 检查存储的内容。相信我,它会省去很多麻烦:)
          【解决方案10】:

          你应该使用

          git stash save
          

          而不是

          git stash create
          

          因为这会创建一个 stash(这是一个常规提交对象)并返回其对象名称,而无需 将其存储在任何地方在 ref 命名空间中。因此无法通过 stash apply 访问。

          使用 git stash save "some comment" 当您有未暂存的更改想要复制/移动到另一个分支时使用

          当您希望保存(隐藏)的更改反映在当前分支上时,请使用 git stash apply stash@{0}(假设您保存的存储索引为 0)

          您可以随时使用git stash list 检查所有存储索引

          并使用git stash drop stash@{0}(假设您保存的存储索引为 0 并且您想删除它)删除特定存储。

          【讨论】:

          • 仅供参考 - 只需键入命令 git stash 默认为 git stash save
          • git stash create 旨在供脚本使用。那是OP的用例。因此,推荐 git stash save 可能对“正常”使用有用,但不适用于 OP 的用例。 OP 可能想看看docs:还有更多与脚本相关的命令,例如git stash store
          • git stash save "message" 现在应该改为 git stash push -m "message"。比较git commit -m "message"
          猜你喜欢
          • 2010-11-15
          • 1970-01-01
          • 2013-06-26
          • 2022-06-16
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 2016-02-06
          • 2019-03-05
          相关资源
          最近更新 更多