734

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
4

10 回答 10

1009

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 将更改堆栈中所有 stash的stash@{n}名称。

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

于 2011-04-20T21:48:57.777 回答
571

要删除使用 创建的普通存储git stash,您需要git stash dropgit stash drop stash@{n}。请参阅下面的更多细节。


您不需要删除使用git stash create. 从文档:

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

由于没有任何内容引用存储提交,因此最终会收集垃圾。


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

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

于 2011-04-20T21:49:12.367 回答
244

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

git stash clear

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

注意:为那些最终在这里寻找一种清除它们的方法的人(比如我)添加了这个答案。

于 2014-08-29T21:09:44.420 回答
87

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

删除 [-q|--安静] []

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

例子:

git stash drop stash@{5}

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

git stash list
于 2015-04-22T17:53:03.980 回答
72

你应该使用

git stash save

并不是

git stash create

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

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

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

你总是可以git stash list用来检查你所有的存储索引

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

于 2011-11-03T07:40:48.713 回答
29
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
于 2020-04-30T13:12:19.023 回答
28

只删除一个存储git stash drop

删除所有存储git stash clear

展示你的藏匿处git stash show

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

于 2021-04-11T09:59:26.013 回答
6

它也有效

git stash drop <index>

git stash drop 5
于 2019-07-03T08:04:04.723 回答
3

文件在这里(中文)请点击。

您可以使用

git 存储列表

git stash drop stash@{0}

在此处输入图像描述

于 2019-07-26T07:05:39.390 回答
2

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

cmd: git stash clear

如果要删除具有存储索引的特定存储,可以使用 drop。

cmd: git stash drop 4

(4 是 stash id 或 stash index)

于 2020-06-17T10:33:38.067 回答