“git stash create x” - 它在哪里?

时间:2011-07-05 21:24:06

标签: git

如果我使用git stash create whatever创建提交,我会收到提交的哈希值,但我找不到git reflog的提交哈希值。

git log stash也不起作用,git stash list也不行。

如何使用git stash create 列出我创建的提交?

3 个答案:

答案 0 :(得分:7)

虽然https://stackoverflow.com/a/6589093/39155中的答案在技术上有效,但从Git 2.9.0开始,该解决方案已经过时,并且存在一种存储danglish stash refs(git stash store)的内置方法。

git stash create创建一个悬空提交,不会将ref存储在任何地方。如果您想保存,则需要使用git stash store进行跟进。来自git-stash联机帮助页:

  

创建一个存储(它是一个常规提交对象)并返回其对象名,而不将其存储在ref命名空间中的任何位置

为了将其存储在ref命名空间中并将其与缓存引用相关联,您需要运行git stash store <commit>。 E.g。

$ git stash create
09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash store 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: Created via "git stash store".

如果您想将名称与隐藏参考号关联,请将-m / --message传递给git stash store

$ git stash store -m "my stash" 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: my stash

答案 1 :(得分:3)

如果您使用the script in this answer,则可以git stash list

#!/bin/sh
#
# git-stash-push
# Push working tree onto the stash without modifying working tree.
# First argument (optional) is the stash message.
if [ -n "$1" ]; then
        git update-ref -m "$1" refs/stash "$(git stash create \"$1\")"
else
        HASH=`git stash create`
        MESSAGE=`git --no-pager log -1 --pretty="tformat:%-s" "$HASH"`
        git update-ref -m "$MESSAGE" refs/stash "$HASH"
fi

然后你可能真的希望在某个时候得到这个提交。要做到这一点,你可以使用git stash list列出存储,它会给你这样的东西(记住,这些可能是愚蠢的提交消息):

stash@{0}: WTF? Nothing is working
stash@{1}: it's all working perfectlY!
stash@{2}: blah2

然后你可以通过运行来恢复blah2

 git stash pop stash@{2}

或者@Eliot指出,你可以用它来破坏你的存储:

 git stash apply stash@{2}

答案 2 :(得分:3)

修改

thx告诉我一个新功能(?)

该手册页说明了这一点:

  

创建一个存储(它是一个常规提交对象)并返回其对象名,而不将其存储在ref命名空间中的任何位置。

存储在ref命名空间中的任何位置。你必须跟踪它。如果你输了,

git fsck --unreachable 

或许可以提供一个提示。请注意过期,所以不要只做git gc --prune=...