git-reflog(1)
=============

NAME
----
git-reflog - Manage reflog information


SYNOPSIS
--------
'git reflog' <subcommand> <options>

DESCRIPTION
-----------
The command takes various subcommands, and different options
depending on the subcommand:

[verse]
'git reflog expire' [--dry-run] [--stale-fix] [--verbose]
	[--expire=<time>] [--expire-unreachable=<time>] [--all] <refs>...
'git reflog delete' ref@\{specifier\}...
'git reflog' ['show'] [log-options] [<ref>]

Reflog is a mechanism to record when the tip of branches are
updated.  This command is to manage the information recorded in it.

The subcommand "expire" is used to prune older reflog entries.
Entries older than `expire` time, or entries older than
`expire-unreachable` time and not reachable from the current
tip, are removed from the reflog.  This is typically not used
directly by the end users -- instead, see linkgit:git-gc[1].

The subcommand "show" (which is also the default, in the absence of any
subcommands) will take all the normal log options, and show the log of
the reference provided in the command-line (or `HEAD`, by default).
The reflog will cover all recent actions (HEAD reflog records branch switching
as well).  It is an alias for `git log -g --abbrev-commit --pretty=oneline`;
see linkgit:git-log[1].

The reflog is useful in various git commands, to specify the old value
of a reference. For example, `HEAD@\{2\}` means "where HEAD used to be
two moves ago", `master@\{one.week.ago\}` means "where master used to
point to one week ago", and so on. See linkgit:gitrevisions[7] for
more details.

To delete single entries from the reflog, use the subcommand "delete"
and specify the _exact_ entry (e.g. "`git reflog delete master@\{2\}`").


OPTIONS
-------

--stale-fix::
	This revamps the logic -- the definition of "broken commit"
	becomes: a commit that is not reachable from any of the refs and
	there is a missing object among the commit, tree, or blob
	objects reachable from it that is not reachable from any of the
	refs.
+
This computation involves traversing all the reachable objects, i.e. it
has the same cost as 'git prune'.  Fortunately, once this is run, we
should not have to ever worry about missing objects, because the current
prune and pack-objects know about reflogs and protect objects referred by
them.

--expire=<time>::
	Entries older than this time are pruned.  Without the
	option it is taken from configuration `gc.reflogExpire`,
	which in turn defaults to 90 days.

--expire-unreachable=<time>::
	Entries older than this time and not reachable from
	the current tip of the branch are pruned.  Without the
	option it is taken from configuration
	`gc.reflogExpireUnreachable`, which in turn defaults to
	30 days.

--all::
	Instead of listing <refs> explicitly, prune all refs.

--updateref::
	Update the ref with the sha1 of the top reflog entry (i.e.
	<ref>@\{0\}) after expiring or deleting.

--rewrite::
	While expiring or deleting, adjust each reflog entry to ensure
	that the `old` sha1 field points to the `new` sha1 field of the
	previous entry.

--verbose::
	Print extra information on screen.

Author
------
Written by Junio C Hamano <gitster@pobox.com>

Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the linkgit:git[1] suite
