On 2022-07-11 17:02, Gerriko io wrote:
I am trying to make sense of reflog as I need to know this to use
revert and reset properly.
I cannot find the most basic information in the git documentation or online.
Surely the most basic question is whether the reflog is sequential or
just random logs or whether it is in time ascending or descending
order.
Without this information I am left baffled and have to guess what this
line means out of the many:
a0bbd34 (HEAD -> master, origin/master, origin/main)
refs/remotes/origin/main@{0}: update by push
Why does it have to be so obscure?
Hi,
The reflog is simply a log of where you've been, in descending order
(latest entry first), and is branch agnostic. It show every commit
you've been on from latest to oldest, and each entry can be heads, tags,
or detached commits. Some operations like rebase may even generate
multiple entries if it's done in multiple steps (ex conflicts resolution).
I believe its main uses are to delay garbage collect (which happens only
after entries have expired form the reflog) and to allow refs selection
using @{date} and @{nth} specifiers (see git-rev-parse, and note @{date}
is not the commit date but rather the reflog date!)... And it's
obviously quite handy to recover a dropped/rewritten ref if you realize
you need to undo what you've done.
Since the date is recorded for each entry you can also display it using
the --date=<format> option. For example to display reflog entries in
local human-readable time, use:
git reflog --date=local
The git-reflog log display options are mostly the same as git-log and
documented in git-log's manpage.
Regards,
--
Thomas