mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
5e6f003ca8
If we are expiring reflog entries for a symbolic reference, then how should --updateref be handled if the newest reflog entry is expired? Option 1: Update the referred-to reference. (This is what the current code does.) This doesn't make sense, because the referred-to reference has its own reflog, which hasn't been rewritten. Option 2: Update the symbolic reference itself (as in, REF_NODEREF). This would convert the symbolic reference into a non-symbolic reference (e.g., detaching HEAD), which is surely not what a user would expect. Option 3: Error out. This is plausible, but it would make the following usage impossible: git reflog expire ... --updateref --all Option 4: Ignore --updateref for symbolic references. We choose to implement option 4. Note: another problem in this code will be fixed in a moment. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Reviewed-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
130 lines
4.1 KiB
Plaintext
130 lines
4.1 KiB
Plaintext
git-reflog(1)
|
|
=============
|
|
|
|
NAME
|
|
----
|
|
git-reflog - Manage reflog information
|
|
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'git reflog' <subcommand> <options>
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
The command takes various subcommands, and different options
|
|
depending on the subcommand:
|
|
|
|
[verse]
|
|
'git reflog' ['show'] [log-options] [<ref>]
|
|
'git reflog expire' [--expire=<time>] [--expire-unreachable=<time>]
|
|
[--rewrite] [--updateref] [--stale-fix]
|
|
[--dry-run] [--verbose] [--all | <refs>...]
|
|
'git reflog delete' [--rewrite] [--updateref]
|
|
[--dry-run] [--verbose] ref@\{specifier\}...
|
|
|
|
Reference logs, or "reflogs", record when the tips of branches and
|
|
other references were updated in the local repository. Reflogs are
|
|
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 in this local repository", and so on. See
|
|
linkgit:gitrevisions[7] for more details.
|
|
|
|
This command manages the information recorded in the reflogs.
|
|
|
|
The "show" subcommand (which is also the default, in the absence of
|
|
any subcommands) shows the log of the reference provided in the
|
|
command-line (or `HEAD`, by default). The reflog covers all recent
|
|
actions, and in addition the `HEAD` reflog records branch switching.
|
|
`git reflog show` is an alias for `git log -g --abbrev-commit
|
|
--pretty=oneline`; see linkgit:git-log[1] for more information.
|
|
|
|
The "expire" subcommand prunes 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 end users -- instead, see
|
|
linkgit:git-gc[1].
|
|
|
|
The "delete" subcommand deletes single entries from the reflog. Its
|
|
argument must be an _exact_ entry (e.g. "`git reflog delete
|
|
master@{2}`"). This subcommand is also typically not used directly by
|
|
end users.
|
|
|
|
|
|
OPTIONS
|
|
-------
|
|
|
|
Options for `show`
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
`git reflog show` accepts any of the options accepted by `git log`.
|
|
|
|
|
|
Options for `expire`
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
--all::
|
|
Process the reflogs of all references.
|
|
|
|
--expire=<time>::
|
|
Prune entries older than the specified time. If this option is
|
|
not specified, the expiration time is taken from the
|
|
configuration setting `gc.reflogExpire`, which in turn
|
|
defaults to 90 days. `--expire=all` prunes entries regardless
|
|
of their age; `--expire=never` turns off pruning of reachable
|
|
entries (but see `--expire-unreachable`).
|
|
|
|
--expire-unreachable=<time>::
|
|
Prune entries older than `<time>` that are not reachable from
|
|
the current tip of the branch. If this option is not
|
|
specified, the expiration time is taken from the configuration
|
|
setting `gc.reflogExpireUnreachable`, which in turn defaults
|
|
to 30 days. `--expire-unreachable=all` prunes unreachable
|
|
entries regardless of their age; `--expire-unreachable=never`
|
|
turns off early pruning of unreachable entries (but see
|
|
`--expire`).
|
|
|
|
--updateref::
|
|
Update the reference to the value of the top reflog entry (i.e.
|
|
<ref>@\{0\}) if the previous top entry was pruned. (This
|
|
option is ignored for symbolic references.)
|
|
|
|
--rewrite::
|
|
If a reflog entry's predecessor is pruned, adjust its "old"
|
|
SHA-1 to be equal to the "new" SHA-1 field of the entry that
|
|
now precedes it.
|
|
|
|
--stale-fix::
|
|
Prune any reflog entries that point to "broken commits". A
|
|
broken commit is a commit that is not reachable from any of
|
|
the reference tips and that refers, directly or indirectly, to
|
|
a missing commit, tree, or blob object.
|
|
+
|
|
This computation involves traversing all the reachable objects, i.e. it
|
|
has the same cost as 'git prune'. It is primarily intended to fix
|
|
corruption caused by garbage collecting using older versions of Git,
|
|
which didn't protect objects referred to by reflogs.
|
|
|
|
-n::
|
|
--dry-run::
|
|
Do not actually prune any entries; just show what would have
|
|
been pruned.
|
|
|
|
--verbose::
|
|
Print extra information on screen.
|
|
|
|
|
|
Options for `delete`
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
`git reflog delete` accepts options `--updateref`, `--rewrite`, `-n`,
|
|
`--dry-run`, and `--verbose`, with the same meanings as when they are
|
|
used with `expire`.
|
|
|
|
|
|
GIT
|
|
---
|
|
Part of the linkgit:git[1] suite
|