Is there a way to cause git-reflog to show a date alongside each entry?
GitGit ReflogReflogGit Problem Overview
The git-reflog command doesn't by default show a date alongside each entry, which strikes me as a strange oversight; I think this would be very helpful.
Are there any command-line options, or other tweaks, which can be employed to cause it to show when each reflog entry was added? The manpage isn't forthcoming...
Git Solutions
Solution 1 - Git
Per the man page, you can use git log
options, e.g.,
git reflog --pretty=short
git reflog --date=iso
Solution 2 - Git
You can use the --walk-reflogs
variant of git log
:
git log -g
This is rather verbose by default, and prints the date among other things. You can format it with the standard --pretty=
flag.
You can also use the reflog command directly with the --pretty=
flag to format the output.
git reflog --pretty='%cd %h %gd %gs'
In the format above, %cd
shows the commit date to the left of the normal reflog output.
Solution 3 - Git
You can use a custom format:
git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'
In the above format, %h
is the commit hash, %cr
is the relative committer date, %gs
is the reflog subject, and, %s
is the commit subject. Look at the git-log docs for other possible placeholders. For instance, using %ci
instead of %cr
will show absolute commit dates.
You can save this in your ~/.gitconfig using a custom pretty
format and refer to it via an alias:
[alias]
rl = reflog --pretty=reflog
[pretty]
reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)
Solution 4 - Git
Tell git
in what format, either counted reflog
entries or timed reflog
entries, i.e.
git reflog @{now}
git reflog @{0}
Solution 5 - Git
If you just want to see the dates relative to the current time, you can use the following command:
git reflog --date=relative
To save some typing, you can create a git alias for it (rl
- short for reflog
):
git config --global alias.rl "reflog --date=relative"
And use the alias instead, like so (the -10
at the end is to show the last 10 actions):
git rl -10
Solution 6 - Git
Note git 2.10 (Q3 2016) improves the documentation about date with git reflog
.
See commit 642833d, commit 1a2a1e8 (27 Jul 2016), and commit d38c7b2, commit 522259d, commit 83c9f95, commit 2b68222 (22 Jul 2016) by Jeff King (peff
).
Helped-by: Jeff King (peff
).
(Merged by Junio C Hamano -- gitster
-- in commit 0d32799, 08 Aug 2016)
The rev-list
options is updated:
> The reflog designator in the output may be shown as ref@{Nth}
(where Nth
is the reverse-chronological index in the reflog) or as ref@{timestamp}
(with the timestamp for that entry), depending on a few rules.
- an update about
--date=raw
:
> shows the date as seconds since the epoch (1970-01-01 00:00:00 UTC), followed by a space, and then the timezone as an offset from UTC (a +
or -
with four digits; the first two are hours, and the second two are minutes).
I.e., as if the timestamp were formatted with strftime("%s %z")
).
Note that the -local
option does not affect the seconds-since-epoch
value (which is always measured in UTC), but does switch the accompanying
timezone value.
And a new option: --date=unix
> shows the date as a Unix epoch timestamp (seconds since 1970).
As with --raw
, this is always in UTC and therefore -local
has no effect.
Solution 7 - Git
Format the git reflog
output as the glol
with ohmyzsh:
git reflog --pretty='%Cred%h%Creset -%C(auto)%d%Creset %gs %Cgreen(%cr) %C(bold blue)<%an>%Creset'
Format the git reflog
output as the glod
with ohmyzsh:
git reflog --pretty='%Cred%h%Creset -%C(auto)%d%Creset %gs %Cgreen(%ad) %C(bold blue)<%an>%Creset'
I made a custom plugin git-mnz for ohmyzsh with these two aliases grlol
, grlod
and some other aliases and functions.
** Sorry if didn't sent a PR to the git plugin, but there are hundreds PR waiting to be merged..
Solution 8 - Git
git reflog --pretty=medium
... but they make it really nasty to find out (there's no bash completion for git-log options, the log
man page doesn't document the placeholder strings for various pretty built-in profiles, plus there are still some differences from the default git-log
format, e.g. you'd have to pass --abbrev
)
Solution 9 - Git
git log --walk-reflogs --date=iso