man pages section 1: User Commands

Exit Print View

Updated: July 2014

git-describe (1)


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


git describe [--all] [--tags] [--contains] [--abbrev=<n>] <committish>...
git describe [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]


Git Manual                                        GIT-DESCRIBE(1)

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

     git describe [--all] [--tags] [--contains] [--abbrev=<n>] <committish>...
     git describe [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]

     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.

     By default (without --all or --tags) git describe only shows
     annotated tags. For more information about creating
     annotated tags see the -a and -s options to git-tag(1).

         Committish object names to describe.

         Describe the working tree. It means describe HEAD and
         appends <mark> (-dirty by default) if the working tree
         is dirty.

         Instead of using only the annotated tags, use any ref
         found in .git/refs/. This option enables matching any
         known branch, remote-tracking branch, or lightweight

         Instead of using only the annotated tags, use any tag
         found in .git/refs/tags. This option enables matching a
         lightweight (non-annotated) tag.

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

         Instead of using the default 7 hexadecimal digits as the
         abbreviated object name, use <n> digits, or as many
         digits as needed to form a unique object name. An <n> of
         0 will suppress long format, only showing the closest

Git          Last change: 02/22/2012                    1

Git Manual                                        GIT-DESCRIBE(1)

         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.

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

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

         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-gdeadbee (0th commit
         since tag v1.2 that points at object deadbee....).

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

         Show uniquely abbreviated commit object as fallback.

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

         [torvalds@g5 git]$ git describe parent

     i.e. the current head of my "parent" branch is based on
     v1.0.4, but since it has a few 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). The "g" prefix
     stands for "git" and is used to allow describing the version

Git          Last change: 02/22/2012                    2

Git Manual                                        GIT-DESCRIBE(1)

     of a software depending on the SCM the software is managed
     with. This is useful in an environment where people may use
     different SCMs.

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

         [torvalds@g5 git]$ git describe 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

         [torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^

     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

     Note that the suffix you get if you type these commands
     today may be longer than what Linus saw above when he ran
     these commands, as your git repository may have new commits
     whose object names begin with 975b that did not exist back
     then, and "-g975b" suffix alone may not be sufficient to
     disambiguate these commits.

     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.

Git          Last change: 02/22/2012                    3

Git Manual                                        GIT-DESCRIBE(1)

     Part of the git(1) suite

     See attributes(5) for descriptions of the following

     |Availability   | developer/versioning/git |
     |Stability      | Uncommitted              |
     This software was built from source available at  The original
     community source was downloaded from  http://git-

     Further information about this software can be found on the
     open source community website at

Git          Last change: 02/22/2012                    4