git-describe(1)
===============

NAME
----
git-describe - Show the most recent tag that is reachable from a commit


SYNOPSIS
--------
'git-describe' [--all] [--tags] [--contains] [--abbrev=<n>] <committish>...

DESCRIPTION
-----------
The command finds the most recent tag that is reachable from a
commit.  If the tag points to the commit, then only the tag is
shown.  Otherwise, it suffixes the tag name with the number of
additional commits on top of the tagged object and the
abbreviated object name of the most recent commit.


OPTIONS
-------
<committish>::
	The object name of the committish.

--all::
	Instead of using only the annotated tags, use any ref
	found in `.git/refs/`.

--tags::
	Instead of using only the annotated tags, use any tag
	found in `.git/refs/tags`.

--contains::
	Instead of finding the tag that predates the commit, find
	the tag that comes after the commit, and thus contains it.
	Automatically implies --tags.

--abbrev=<n>::
	Instead of using the default 8 hexadecimal digits as the
	abbreviated object name, use <n> digits.

--candidates=<n>::
	Instead of considering only the 10 most recent tags as
	candidates to describe the input committish consider
	up to <n> candidates.  Increasing <n> above 10 will take
	slightly longer but may produce a more accurate result.
	An <n> of 0 will cause only exact matches to be output.

--exact-match::
	Only output exact matches (a tag directly references the
	supplied commit).  This is a synonym for --candidates=0.

--debug::
	Verbosely display information about the searching strategy
	being employed to standard error.  The tag name will still
	be printed to standard out.

--long::
	Always output the long format (the tag, the number of commits
	and the abbreviated commit name) even when it matches a tag.
	This is useful when you want to see parts of the commit object name
	in "describe" output, even when the commit in question happens to be
	a tagged version.  Instead of just emitting the tag name, it will
	describe such a commit as v1.2-0-deadbeef (0th commit since tag v1.2
	that points at object deadbeef....).

--match <pattern>::
	Only consider tags matching the given pattern (can be used to avoid
	leaking private tags made from the repository).

EXAMPLES
--------

With something like git.git current tree, I get:

	[torvalds@g5 git]$ git-describe parent
	v1.0.4-14-g2414721

i.e. the current head of my "parent" branch is based on v1.0.4,
but since it has a handful commits on top of that,
describe has added the number of additional commits ("14") and
an abbreviated object name for the commit itself ("2414721")
at the end.

The number of additional commits is the number
of commits which would be displayed by "git log v1.0.4..parent".
The hash suffix is "-g" + 7-char abbreviation for the tip commit
of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`).

Doing a "git-describe" on a tag-name will just show the tag name:

	[torvalds@g5 git]$ git-describe v1.0.4
	v1.0.4

With --all, the command can use branch heads as references, so
the output shows the reference path as well:

	[torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2
	tags/v1.0.0-21-g975b

	[torvalds@g5 git]$ git describe --all HEAD^
	heads/lt/describe-7-g975b

With --abbrev set to 0, the command can be used to find the
closest tagname without any suffix:

	[torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2
	tags/v1.0.0

SEARCH STRATEGY
---------------

For each committish supplied "git describe" will first look for
a tag which tags exactly that commit.  Annotated tags will always
be preferred over lightweight tags, and tags with newer dates will
always be preferred over tags with older dates.  If an exact match
is found, its name will be output and searching will stop.

If an exact match was not found "git describe" will walk back
through the commit history to locate an ancestor commit which
has been tagged.  The ancestor's tag will be output along with an
abbreviation of the input committish's SHA1.

If multiple tags were found during the walk then the tag which
has the fewest commits different from the input committish will be
selected and output.  Here fewest commits different is defined as
the number of commits which would be shown by "git log tag..input"
will be the smallest number of commits possible.


Author
------
Written by Linus Torvalds <torvalds@osdl.org>, but somewhat
butchered by Junio C Hamano <junkio@cox.net>.  Later significantly
updated by Shawn Pearce <spearce@spearce.org>.

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

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