有没有一种方法可以让 git-reflog 显示每个条目的日期?

455

git-reflog命令默认情况下不会显示每个条目的日期,这在我看来是一个奇怪的疏忽; 我认为这将非常有帮助。

是否有任何命令行选项或其他调整可以用来使其显示每个reflog条目添加的时间? 该manpage没有提供相关信息...

9个回答

641

根据 man 手册,您可以使用 git log 选项,例如:

git reflog --pretty=short

git reflog --date=iso

17
可以把头部编号(或者其他正确的术语)替换成日期吗?两者可以同时存在吗? - Marco Eckstein
13
@Marco 似乎您需要使用自定义格式:git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'。我已为此添加了一个别名:https://github.com/blueyed/dotfiles/commit/5c4e4be9fc6a56d1ccbc16398ac3fef007d5cc47 - blueyed
4
不完全相同——reflog命令中的“--date=iso”显示的是该reflog条目创建的时间,而不是提交的时间。尽管如此,我仍然很感激你的别名,因为我用它来制作一个更漂亮的reflog。 - Johan Henkens
2
你可以结合使用:git reflog --date=iso --pretty=short - Herz3h
5
git reflog --date=iso正是我在寻找的,一行代码加上日期信息。 - Vadorequest

49

您可以使用--walk-reflogs版本的git log命令:

Translated:

您可以使用--walk-reflogs版本的git log命令:

git log -g

默认情况下,此输出较为冗长,其中包含日期和其他信息。您可以使用标准的--pretty=标志进行格式设置。

您还可以直接使用reflog命令,并使用--pretty=标志来格式化输出。

git reflog --pretty='%cd %h %gd %gs'
在上面的格式中,%cd 显示提交日期在普通 reflog 输出的左侧。

14
%cd 显示 reflog 所指向的提交日期,但这并不是我(或 OP)想要的:我们希望得到 reflog 条目的日期。 - Thanatos
12
“git log --walk-reflogs --date=iso”刚刚让我的一天变得美好。 - Alois Mahdal
1
git reflog --pretty='%cd %h %gd %gs' 可以显示颜色吗? - alper
完美无瑕!谢谢! - Roberto Bonini

21

您可以使用自定义格式:

git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'
在上面的格式中,%h表示提交哈希值,%cr表示相对提交日期,%gs表示Reflog主题,%s表示提交主题。请参阅 git-log文档 以获取其他可能的占位符。例如,使用%ci代替%cr将显示绝对提交日期。 您可以使用自定义的pretty格式将其保存在~/.gitconfig中,并通过别名引用它:
[alias]
    rl = reflog --pretty=reflog
[pretty]
    reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)

1
问题在于%gd显示的日期与@{now}不同。在搜索reflog时,知道确切的时间非常重要(例如,“我知道它在8:57处于正确状态”)。 - ErikE
2
@ErikE - 只需将 cr 更改为 ci 即可获取每个操作的完整时间戳:git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)' - n1k31t4
而不是(20)%gd(17)%gd似乎更好的对齐。 - alper

13

enter image description here

如果你只想看到与当前时间相关的日期,可以使用以下命令:
git reflog --date=relative

为了节省一些打字,你可以为它创建一个 git 别名(rl - 代表 reflog):
git config --global alias.rl "reflog --date=relative"

使用别名代替,就像这样(末尾的-10表示显示最后10个操作):
git rl -10

我们如何显示所有的头部编号,例如 HEAD@{16} - alper
@alper 只需使用 git reflog 即可获得该格式。 - Wenfang Du
我想在显示git reflog时按照排序格式进行排列,就像使用(--date=relative)标志一样。 - alper
@alper 我也想知道 :)。 - Wenfang Du
我把它作为一个问题提出来(https://stackoverflow.com/questions/72389262/how-can-i-use-git-reflog-format-while-showing-it-as-sorted-with-date-relati),请随意编辑 :-) - alper

12
告诉 git 使用何种格式,计数形式的reflog条目或按时间排序的reflog条目。
git reflog @{now}    
git reflog @{0}

我作为一名程序员,不太喜欢在 {} 中使用“自然语言”日期,但幸运的是,这种技术也适用于 --date=iso - mwfearnley

6
注意,git 2.10(2016年第三季度)改进了有关日期的文档,其中包括git reflog

查看提交 642833d, 提交 1a2a1e8 (2016年7月27日), 以及提交 d38c7b2, 提交 522259d, 提交 83c9f95, 提交 2b68222 (2016年7月22日),作者是Jeff King (peff)
协助者:Jeff King (peff)
(由Junio C Hamano -- gitster --提交0d32799的时候合并,于2016年8月8日)

rev-list 选项已更新:

输出中的 reflog 设计器可能会显示为 ref@{Nth}(其中 Nth 是 reflog 中的反向时间索引)或者 ref@{timestamp}(带有该条目的时间戳),这取决于一些规则。

它包括: - 关于 --date=raw 的更新:

该命令以从纪元(1970-01-01 00:00:00 UTC)开始的秒数作为日期,后跟时区作为与UTC的偏移量(使用四位数字的+-;前两个为小时,后两个为分钟)。即,就像时间戳用strftime("%s %z")格式化一样。请注意,-local选项不影响seconds-since-epoch值(始终使用UTC测量),但确实切换了相应的时区值。 还有一个新选项:--date=unix,它将日期显示为Unix纪元时间戳(自1970年以来的秒数)。与--raw一样,这始终处于UTC中,因此-local无效。

5

使用ohmyzsh将git reflog 输出格式化为 glol

git reflog --pretty='%Cred%h%Creset -%C(auto)%d%Creset %gs %Cgreen(%cr) %C(bold blue)<%an>%Creset'

使用ohmyzsh将git reflog输出格式化为glod

git reflog --pretty='%Cred%h%Creset -%C(auto)%d%Creset %gs %Cgreen(%ad) %C(bold blue)<%an>%Creset'

我制作了一个自定义插件git-mnz,在ohmyzsh中使用这两个别名grlolgrlod,以及其他一些别名和函数。

很抱歉没有向git插件发送PR,因为那里已经有数百个等待合并的PR了。


2

git reflog --pretty=medium

...但是他们让查找变得非常麻烦(没有针对git-log选项的bash自动补全,log手册也没有记录各种预定义pretty格式字符串的占位符,而且与默认的git-log格式仍存在一些差异,例如你需要传递--abbrev参数)。


0

git log --walk-reflogs --date=iso

git log --walk-reflogs --date=iso


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接