"git stash create x" - 它在哪里?

Dan*_*ark 9 git

如果我创建一个提交,git stash create whatever我得到提交的哈希,但我找不到提交哈希git reflog.

git log stash也不起作用git stash list.

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

Dan*_*erz 9

虽然/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 / --messagegit stash store.

$ git stash store -m "my stash" 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: my stash
Run Code Online (Sandbox Code Playgroud)


Dan*_*ark 4

如果您使用此答案中的脚本,则可以执行此操作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)

  • 另外值得注意的是:“git stash pop”从存储列表中删除存储并将更改应用到工作副本,而“git stash apply”将存储保留在列表中并应用更改。 (4认同)