使用 git stash list
显示带有 ID 的存储列表。使用 git stash list --date=local
或 git stash list --date=relative
给我他们的时间,但我不知道他们对应的 ID 是什么。
我想在某个时间获得一个藏品。
最佳答案
git stash list
只需使用一组特定的选项运行 git log
:
list_stash () {
have_stash || return 0
git log --format="%gd: %gs" -g --first-parent -m "$@" $ref_stash --
}
$@
部分插入您指定的任何附加选项(默认情况下没有,但在本例中为 --date=relative
)。1
当您使用 --date=relative
时,这会修改 %gd
的输出:而不是带有 索引 的简短 reflog,您获取带有相对时间戳的简短引用:
$ git stash list
stash@{0}: ...
$ git stash list --date=relative
stash@{4 minutes ago}: ...
这种情况下的解决方案是使用您自己的显式格式,而不是仅仅让 --date=relative
修改 %gd
的显示方式。例如:
$ git stash list --format='%gd (%cr): %gs'
stash@{0} (4 minutes ago): ...
(%cr
以相对格式插入提交的提交者时间戳——一旦您知道所有 git stash
所做的就是为您进行几次提交,这就有意义了,提交存储在特殊的 stash
ref 而不是分支上)。
1在查看此答案时,我注意到 --first-parent
和 -m
参数(字面上存在于 git stash
code) 乍一看似乎是多余的,因为 -g
参数。 git log
的 -g
参数告诉它只查看 reflog,而不是提交历史,在这种情况下,--first-parent
没有任何意义。同时 -m
告诉 git diff
拆分 merge 提交,但我们查看的是提交日志,而不是差异,那么它在这里做什么?
答案是 git log
可以 显示一个补丁,它运行 git diff
,所以如果你给 - p
作为参数,--first-parent -m
将此差异限制为将 stash reflog 指向的提交与其第一个父级进行比较。 stash bag reflog 入口点指向的提交是工作树提交,其第一个 父级是存储包挂起的原始提交。 (它的第二个父项是索引提交,它的第三个父项,如果存在的话,是所有或未跟踪的文件提交。)所以这些选项是为了使 git stash list -p
diff 存储的工作树提交 stash 本身时提交的当前提交。
这很聪明,但很晦涩! :-)
关于git - 如何查看存储 ID 旁边的存储日期/时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686452/