【发布时间】:2011-09-29 03:56:03
【问题描述】:
如果我使用git stash create whatever 创建提交,我会返回提交的哈希值,但我找不到使用git reflog 的提交哈希值。
git log stash 也不起作用,git stash list 也不起作用。
如何列出我使用 git stash create 创建的提交?
【问题讨论】:
标签: git
如果我使用git stash create whatever 创建提交,我会返回提交的哈希值,但我找不到使用git reflog 的提交哈希值。
git log stash 也不起作用,git stash list 也不起作用。
如何列出我使用 git stash create 创建的提交?
【问题讨论】:
标签: git
虽然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 联机帮助页:
创建一个 stash(这是一个常规的提交对象)并返回其对象名称,而不是将其存储在 ref 命名空间中的任何位置
为了将其存储在 ref 命名空间中并将其与缓存 ref 关联,您需要运行 git stash store <commit>。例如
$ 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
【讨论】:
git stash,就没有办法在不处理哈希的情况下自动将其推送到远程仓库,对吧?
git stash 只会在您的本地结帐时创建一个参考。 AFAIK 没有办法在不标记或分支参考的情况下将其推送到远程。
如果您使用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}
【讨论】:
git stash pop 从存储列表中删除存储并将更改应用到您的工作副本,而 git stash apply 将存储保留在列表中并应用更改。
编辑
谢谢你告诉我一个新功能(?)
手册页详细说明:
创建一个 stash(这是一个常规提交对象)并返回其对象名称,而不是将其存储在 ref 命名空间中的任何位置。
它不存储在 ref 命名空间中的任何位置。你必须跟踪它。如果你丢了,
git fsck --unreachable
或许可以提供提示。小心过期,所以不要在这个时候做git gc --prune=...
【讨论】:
save。我的意思是 create 因为我不希望 reset --hard 自动运行。
Create a stash (which is a regular commit object) and return its object name, without storing it anywhere in the ref namespace.