【问题标题】:How to show date and time of a commit by hash如何通过哈希显示提交的日期和时间
【发布时间】:2018-10-31 08:20:24
【问题描述】:

我使用git reflog 来识别我创建特定分支时的哈希值。我得到了fe1ddcdef 的哈希值。我还没有把这个分支推送到远程。我现在正在尝试查找fe1ddcdef 发生的日期和时间。 git reflog 只显示给我:

fe1ddcdef HEAD@{11}: checkout: moving from master to handoff

没有日期或时间。

git log 太冗长了,因为它包含了我所有同事的提交,我无法轻易在大海捞针中找到fe1ddcdef 的针。

我怎样才能简单地找到提交fe1ddcdef的日期和时间?

【问题讨论】:

    标签: git


    【解决方案1】:

    只需使用:

    git show fe1ddcdef
    

    ... 显示提交的内容。实际上,一旦你有了任何标识提交对象的表达式,你就可以在所有需要修改的地方使用它。这些表达式可以是十六进制哈希(甚至是部分)、分支名称或标签名称。它也可以是其中之一,与一个或多个运算符相关联,例如“^”、“~”或“@”。

    这意味着您也可以使用git log fe1ddcdef 来获取从这一点开始的分支的完整历史记录。

    如果你只想得到它的日期和时间而不是别的,你可以输入:

    git show --no-patch --no-notes --pretty='%cd' fe1ddcdef
    

    '%cd' 替换为'%h %cd %s' 以添加哈希摘要和提交的主题消息。

    【讨论】:

    • %cI 更适合用于脚本,例如用于tar --mtime
    【解决方案2】:

    你可以试试--date

    git reflog --date=iso
    

    它会给你 timstamp 每个哈希:

    cd7c3721 HEAD@{2021-03-25 16:47:42 +0100}: commit: Updated paths
    644bc38f HEAD@{2021-03-25 01:28:32 +0100}: commit: Add feign router
    c7d62f34 HEAD@{2021-03-25 01:14:42 +0100}: commit: Add feign config
    fdaedc9e HEAD@{2021-03-25 01:12:31 +0100}: commit: Add test config
    

    您还可以使用git pretty formats 创建自己的格式。另请查看answer 了解更多选项。

    【讨论】:

    • 请注意,这将显示 reflog 时间戳,即 OP 签出该提交的时间。这可能就是他想要的。
    【解决方案3】:

    我现在正在尝试查找 fe1ddcdef 发生的日期和时间

    “发生”没有明确定义,但我可以注意到每个提交都有两个与之关联的日期和时间戳:作者日期提交日期 em>。

    通常这两个是相同的,除非您使用复制提交的各种选项中的任何一个,在这种情况下,作者时间戳是它首次提交的日期,而提交者时间戳是进行该特定提交的时间。

    两个时间戳都在用户的完全控制之下。但是,通常人们不会覆盖它们,因此它们与自己计算机的时钟一样准确(即,不是很准确)。

    要查看两个日期,请使用,例如:

    git log --no-walk --pretty=fuller fe1ddcdef
    

    要只查看一个,您可以省略格式,或使用git show <hash>(也显示差异)。要获取日期,请使用--pretty=format:<directives>--format=<directives>。打印作者日期的指令格式为%a<letter>,打印提交者日期的指令格式为%c<letter>,其中<letter> 部分是dDr、@987654333 之一@、iI。更多详情请参阅PRETTY FORMATS section of the git log documentation

    【讨论】:

      【解决方案4】:

      引用提交的规范化方式是abbreviated hash (subject, date),没有时间。它被称为“参考”。

      在 Git 2.25(2020 年第一季度)中,“git log”家族学习了“--pretty=reference”,它以日志消息中常用的格式给出提交的名称。

      这种格式与您正在寻找的格式接近。

      参见commit 3798149commit 1f0fc1dcommit 618a855commit ac52d94commit 3e8ed3bcommit 4982516commit f0f9de2commit fb2ffa7commit fb2ffa7commit bae74c9commit bd00717@987654330(2011 年 11 月 20 日) 987654331@.
      请参阅 René Scharfe (rscharfe)commit 0df6211(2019 年 11 月 20 日)。
      (由 Junio C Hamano -- gitster -- 合并于 commit d37cfe3,2019 年 12 月 10 日)

      pretty:提供短日期格式

      签字人:René Scharfe
      签字人:Denton Liu

      分别添加占位符%as%cs 来格式化作者日期和提交者日期,不带时间部分,就像--date=short 一样,即像YYYY-MM-DD

      为什么?
      由于贡献和补丁:

      pretty:实现'reference'格式

      基于补丁程序:SZEDER Gábor
      签名人:Denton Liu

      在某些项目中引用其他提交的标准格式(例如git.gitreference 格式
      这在Documentation/SubmittingPatches 中被描述为:

      如果您想引用稳定分支历史中的先前提交,请使用格式“abbreviated hash (subject, date)”,如下所示:

      ....
      
          Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
          noticed that ...
      ....
      

      由于这种格式很常用,所以把它标准化为一种漂亮的格式。

      pretty-formats documentation now includes

      'reference'

      <abbrev hash> (<title line>, <short author date>)
      

      此格式用于在提交消息中引用另一个提交,与--pretty='format:%C(auto)%h (%s, %ad)'相同。
      默认情况下,日期格式为 --date=short,除非明确指定另一个 --date 选项。
      与任何带有格式占位符的format: 一样,其输出不受--decorate--walk-reflogs 等其他选项的影响。


      在 Git 2.25 之前,如WisdmLabsanswer 所示,您可能会这样做:

      git show -s --date=short --pretty='format:%h (%s, %ad)' <commit>
      

      现在(Git 2.25+):

      git show -s --pretty=reference <commit>
      

      以 Git 2.32(2021 年第二季度)和“log --format=...”为例,以各种格式显示时间戳。

      参见Ævar Arnfjörð Bjarmason (avar)commit 3593ebdcommit fbfcaec(2021 年 4 月 25 日)。
      (由 Junio C Hamano -- gitster -- 合并到 commit e5d99d3,2021 年 5 月 7 日)

      pretty tests:简化%aI/%cI日期格式测试

      签字人:Ævar Arnfjörð Bjarmason

      466fb67(“pretty:提供严格的 ISO 8601 日期格式”,2014-08-29,Git v2 中添加的 %aI/%cI 日期格式(iso-strict)更改不必要的复杂测试.2.0-rc0 -- merge) 改为使用用于测试 %as/%cs 的相同模式,因为 0df6211 ("pretty: 提供短日期格式",2019-11-19,Git v2.25.0-rc0 -- mergebatch #5 中列出)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 2018-02-28
        • 2012-02-06
        • 2012-12-31
        • 1970-01-01
        相关资源
        最近更新 更多