207 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
	
		
			7.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| git-describe(1)
 | |
| ===============
 | |
| 
 | |
| NAME
 | |
| ----
 | |
| git-describe - Give an object a human readable name based on an available ref
 | |
| 
 | |
| SYNOPSIS
 | |
| --------
 | |
| [verse]
 | |
| 'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]
 | |
| 'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
 | |
| 'git describe' <blob>
 | |
| 
 | |
| 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. The result
 | |
| is a "human-readable" object name which can also be used to
 | |
| identify the commit to other git commands.
 | |
| 
 | |
| 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 linkgit:git-tag[1].
 | |
| 
 | |
| If the given object refers to a blob, it will be described
 | |
| as `<commit-ish>:<path>`, such that the blob can be found
 | |
| at `<path>` in the `<commit-ish>`, which itself describes the
 | |
| first commit in which this blob occurs in a reverse revision walk
 | |
| from HEAD.
 | |
| 
 | |
| OPTIONS
 | |
| -------
 | |
| <commit-ish>...::
 | |
| 	Commit-ish object names to describe.  Defaults to HEAD if omitted.
 | |
| 
 | |
| --dirty[=<mark>]::
 | |
| --broken[=<mark>]::
 | |
| 	Describe the state of the working tree.  When the working
 | |
| 	tree matches HEAD, the output is the same as "git describe
 | |
| 	HEAD".  If the working tree has local modification "-dirty"
 | |
| 	is appended to it.  If a repository is corrupt and Git
 | |
| 	cannot determine if there is local modification, Git will
 | |
| 	error out, unless `--broken' is given, which appends
 | |
| 	the suffix "-broken" instead.
 | |
| 
 | |
| --all::
 | |
| 	Instead of using only the annotated tags, use any ref
 | |
| 	found in `refs/` namespace.  This option enables matching
 | |
| 	any known branch, remote-tracking branch, or lightweight tag.
 | |
| 
 | |
| --tags::
 | |
| 	Instead of using only the annotated tags, use any tag
 | |
| 	found in `refs/tags` namespace.  This option enables matching
 | |
| 	a lightweight (non-annotated) tag.
 | |
| 
 | |
| --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 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 tag.
 | |
| 
 | |
| --candidates=<n>::
 | |
| 	Instead of considering only the 10 most recent tags as
 | |
| 	candidates to describe the input commit-ish 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-gdeadbee (0th commit since tag v1.2
 | |
| 	that points at object deadbee....).
 | |
| 
 | |
| --match <pattern>::
 | |
| 	Only consider tags matching the given `glob(7)` pattern,
 | |
| 	excluding the "refs/tags/" prefix. If used with `--all`, it also
 | |
| 	considers local branches and remote-tracking references matching the
 | |
| 	pattern, excluding respectively "refs/heads/" and "refs/remotes/"
 | |
| 	prefix; references of other types are never considered. If given
 | |
| 	multiple times, a list of patterns will be accumulated, and tags
 | |
| 	matching any of the patterns will be considered.  Use `--no-match` to
 | |
| 	clear and reset the list of patterns.
 | |
| 
 | |
| --exclude <pattern>::
 | |
| 	Do not consider tags matching the given `glob(7)` pattern, excluding
 | |
| 	the "refs/tags/" prefix. If used with `--all`, it also does not consider
 | |
| 	local branches and remote-tracking references matching the pattern,
 | |
| 	excluding respectively "refs/heads/" and "refs/remotes/" prefix;
 | |
| 	references of other types are never considered. If given multiple times,
 | |
| 	a list of patterns will be accumulated and tags matching any of the
 | |
| 	patterns will be excluded. When combined with --match a tag will be
 | |
| 	considered when it matches at least one --match pattern and does not
 | |
| 	match any of the --exclude patterns. Use `--no-exclude` to clear and
 | |
| 	reset the list of patterns.
 | |
| 
 | |
| --always::
 | |
| 	Show uniquely abbreviated commit object as fallback.
 | |
| 
 | |
| --first-parent::
 | |
| 	Follow only the first parent commit upon seeing a merge commit.
 | |
| 	This is useful when you wish to not match tags on branches merged
 | |
| 	in the history of the target commit.
 | |
| 
 | |
| 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 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" + unambiguous abbreviation for the tip commit
 | |
| of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`).
 | |
| The "g" prefix stands for "git" and is used to allow describing the version 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 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 --abbrev=4 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
 | |
| 
 | |
| 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.
 | |
| 
 | |
| 
 | |
| SEARCH STRATEGY
 | |
| ---------------
 | |
| 
 | |
| For each commit-ish 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 commit-ish's SHA-1. If `--first-parent` was
 | |
| specified then the walk will only consider the first parent of each
 | |
| commit.
 | |
| 
 | |
| If multiple tags were found during the walk then the tag which
 | |
| has the fewest commits different from the input commit-ish 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.
 | |
| 
 | |
| BUGS
 | |
| ----
 | |
| 
 | |
| Tree objects as well as tag objects not pointing at commits, cannot be described.
 | |
| When describing blobs, the lightweight tags pointing at blobs are ignored,
 | |
| but the blob is still described as <committ-ish>:<path> despite the lightweight
 | |
| tag being favorable.
 | |
| 
 | |
| GIT
 | |
| ---
 | |
| Part of the linkgit:git[1] suite
 |