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

标签 git git-stash

使用 git stash list 显示带有 ID 的存储列表。使用 git stash list --date=localgit 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/

相关文章:

git - 将 Change-Id 添加到所有提交

git - 您如何使用未暂存的更改正确切换开发设备?

git - 撤消 git 过滤器分支

git - 如何git标记所有子模块?

git - 如果我将更改存储在一个分支中然后删除该分支会发生什么

git - Git 的存储机制本质上是创建提交然后挑选它吗?

Git 命令执行 pull 并将我的更改放在顶部而不 stash ?

java - 当 git 与另一个分支 merge 时,java 文件中缺少一些变量声明

bash - 是否可以仅使用命令行从模板创建新的 git 存储库?

可能破坏/重写历史的 Git 命令