如果我使用git stash create whatever
创建提交,我会收到提交的哈希值,但我找不到git reflog
的提交哈希值。
git log stash
也不起作用,git stash list
也不行。
如何使用git stash create
列出我创建的提交?
答案 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=...