如何查看存储ID旁边的存储日期/时间戳?

时间:2015-07-28 20:29:31

标签: git git-stash

使用git stash list向我显示带有ID的藏匿列表。使用git stash list --date=localgit stash list --date=relative会给我他们的时间,但我不知道他们的相应ID是什么。

我想在某个时间获得藏匿。

2 个答案:

答案 0 :(得分:20)

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,您会得到一个带有相对时间的简短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代码中)最初似乎是多余的,因为-g参数。 -g的{​​{1}}参数告诉它只查看reflog,而不是提交历史记录,在这种情况下,git log没有任何意义。同时--first-parent告诉-m拆分合并提交,但是我们正在查看提交日志,而不是差异,那么这里做了什么呢?

答案是git diff 可以显示一个补丁,它运行git log,所以如果你给git diff作为参数,{{{ 1}}限制此差异来比较存储reflog指向其第一个父级的提交。 reflog条目指向的stash bag提交是工作树提交,其第一个父提交是存储包挂起的原始提交。 (它的第二个父级是索引提交,它的第三个父级,如果存在,则是全部或未跟踪的文件提交。)因此这些选项可以使[{1}}区分存储的工作树提交以防止当前的提交藏匿本身的时候。

这很聪明,但相当模糊! : - )

答案 1 :(得分:10)

You can actually use the stash@<date> syntax directly when referring to a stash:

$ git stash list --date=local
stash@{Sun Dec 21 22:32:14 2014}: WIP on develop: 7142a6e Update data files
stash@{Fri Dec 12 10:02:20 2014}: WIP on develop: c72abda Add initial calibration data
stash@{Wed Dec 10 10:02:05 2014}: WIP on master: 1d27422 Bug fix for gadgeteer
$ git show 'stash@{Fri Dec 12 10:02:20 2014}'
commit a096484501caf14942f01a6500a5d0c3476d3145
Merge: c72abda 861fff6
Author: Robert Xiao <brx@cs.cmu.edu>
Date:   Fri Dec 12 13:02:20 2014 -0500

    WIP on develop: c72abda Add initial calibration data
...
$ git stash pop 'stash@{Fri Dec 12 10:02:20 2014}'

No need to get the ID of the stash at all! This even works with date=relative as long as the relative dates are unique.