如果我创建一个提交,git stash create whatever我得到提交的哈希,但我找不到提交哈希git reflog.
git log stash也不起作用git stash list.
如何列出我创建的提交git stash create?
虽然/sf/answers/461236541/中的答案在技术上有效,但是从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>.例如
$ git stash create
09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash store 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: Created via "git stash store".
Run Code Online (Sandbox Code Playgroud)
如果要将名称与存储引用关联,只需传递-m / --message给git stash store.
$ git stash store -m "my stash" 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: my stash
Run Code Online (Sandbox Code Playgroud)
如果您使用此答案中的脚本,则可以执行此操作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
Run Code Online (Sandbox Code Playgroud)
然后你可能真的想在某个时候取回该提交。为此,您可以使用它列出存储,这会为git stash list您提供类似的内容(请记住,这些可能是愚蠢的提交消息):
stash@{0}: WTF? Nothing is working
stash@{1}: it's all working perfectlY!
stash@{2}: blah2
Run Code Online (Sandbox Code Playgroud)
然后你可以blah2通过运行以下命令来恢复:
git stash pop stash@{2}
Run Code Online (Sandbox Code Playgroud)
或者正如 @Eliot 指出的,你可以用它来不破坏你的储藏室:
git stash apply stash@{2}
Run Code Online (Sandbox Code Playgroud)