449

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...

Andrew Ferrier
  • 16,664
  • 13
  • 47
  • 76

8 Answers8

634

Per the man page, you can use git log options, e.g.,

git reflog --pretty=short

git reflog --date=iso
Rob Bednark
  • 25,981
  • 23
  • 80
  • 125
Balog Pal
  • 16,195
  • 2
  • 23
  • 37
  • 16
    This replaces the head number (or whatever the correct term is) with the date. Can you have both? – Marco Eckstein Jul 09 '14 at 10:23
  • 13
    @Marco it seems you would have to use a custom format: `git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'`. I have added an alias for this: https://github.com/blueyed/dotfiles/commit/5c4e4be9fc6a56d1ccbc16398ac3fef007d5cc47 – blueyed Nov 23 '14 at 12:13
  • 3
    @blueyed Not quite the same - the `--date=iso` in the reflog command shows when that reflog entry was created, not the time of the commit. Still appreciate your alias, as I've used it to make a prettier reflog. – Johan Henkens Jul 31 '19 at 23:04
  • 2
    You can combine both: `git reflog --date=iso --pretty=short` – Herz3h Sep 11 '20 at 12:55
  • 5
    `git reflog --date=iso` is exactly what I was looking for, one-liner with date. – Vadorequest Jan 31 '21 at 11:51
49

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.

Klas Mellbourn
  • 42,571
  • 24
  • 140
  • 158
20

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)
Rob Bednark
  • 25,981
  • 23
  • 80
  • 125
blueyed
  • 27,102
  • 4
  • 75
  • 71
  • 1
    The problem with this is that `%gd` doesn't show the same date as `@{now}` does. When searching the reflog, knowing the exact time can be really important ("I know it was in the right state at 8:57" for example). – ErikE Jul 21 '15 at 19:50
  • 2
    @ErikE - Just change the `cr` to `ci` to get the full timestamp of each action: `git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)'` – n1k31t4 Oct 09 '19 at 08:50
  • instead of `(20)%gd` ; `(17)%gd` seems like better alignment – alper Nov 05 '20 at 11:06
12

Tell git in what format, either counted reflog entries or timed reflog entries, i.e.

git reflog @{now}    
git reflog @{0}
alper
  • 2,919
  • 9
  • 53
  • 102
gitster
  • 121
  • 1
  • 2
  • The programmer in me doesn't like the "natural language" dates inside the `{}`, but happily this technique also works with `--date=iso`. – mwfearnley Feb 01 '19 at 20:59
12

enter image description here

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
Wenfang Du
  • 8,804
  • 9
  • 59
  • 90
6

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.

It includes: - 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.

VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
5

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..

manzapanza
  • 6,087
  • 4
  • 39
  • 48
2

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)

usretc
  • 723
  • 4
  • 9