]>
Commit | Line | Data |
---|---|---|
1 | git-describe(1) | |
2 | =============== | |
3 | ||
4 | NAME | |
5 | ---- | |
6 | git-describe - Show the most recent tag that is reachable from a commit | |
7 | ||
8 | ||
9 | SYNOPSIS | |
10 | -------- | |
11 | [verse] | |
12 | 'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] <committish>... | |
13 | 'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>] | |
14 | ||
15 | DESCRIPTION | |
16 | ----------- | |
17 | The command finds the most recent tag that is reachable from a | |
18 | commit. If the tag points to the commit, then only the tag is | |
19 | shown. Otherwise, it suffixes the tag name with the number of | |
20 | additional commits on top of the tagged object and the | |
21 | abbreviated object name of the most recent commit. | |
22 | ||
23 | By default (without --all or --tags) `git describe` only shows | |
24 | annotated tags. For more information about creating annotated tags | |
25 | see the -a and -s options to linkgit:git-tag[1]. | |
26 | ||
27 | OPTIONS | |
28 | ------- | |
29 | <committish>...:: | |
30 | Committish object names to describe. | |
31 | ||
32 | --dirty[=<mark>]:: | |
33 | Describe the working tree. | |
34 | It means describe HEAD and appends <mark> (`-dirty` by | |
35 | default) if the working tree is dirty. | |
36 | ||
37 | --all:: | |
38 | Instead of using only the annotated tags, use any ref | |
39 | found in `.git/refs/`. This option enables matching | |
40 | any known branch, remote branch, or lightweight tag. | |
41 | ||
42 | --tags:: | |
43 | Instead of using only the annotated tags, use any tag | |
44 | found in `.git/refs/tags`. This option enables matching | |
45 | a lightweight (non-annotated) tag. | |
46 | ||
47 | --contains:: | |
48 | Instead of finding the tag that predates the commit, find | |
49 | the tag that comes after the commit, and thus contains it. | |
50 | Automatically implies --tags. | |
51 | ||
52 | --abbrev=<n>:: | |
53 | Instead of using the default 7 hexadecimal digits as the | |
54 | abbreviated object name, use <n> digits, or as many digits | |
55 | as needed to form a unique object name. An <n> of 0 | |
56 | will suppress long format, only showing the closest tag. | |
57 | ||
58 | --candidates=<n>:: | |
59 | Instead of considering only the 10 most recent tags as | |
60 | candidates to describe the input committish consider | |
61 | up to <n> candidates. Increasing <n> above 10 will take | |
62 | slightly longer but may produce a more accurate result. | |
63 | An <n> of 0 will cause only exact matches to be output. | |
64 | ||
65 | --exact-match:: | |
66 | Only output exact matches (a tag directly references the | |
67 | supplied commit). This is a synonym for --candidates=0. | |
68 | ||
69 | --debug:: | |
70 | Verbosely display information about the searching strategy | |
71 | being employed to standard error. The tag name will still | |
72 | be printed to standard out. | |
73 | ||
74 | --long:: | |
75 | Always output the long format (the tag, the number of commits | |
76 | and the abbreviated commit name) even when it matches a tag. | |
77 | This is useful when you want to see parts of the commit object name | |
78 | in "describe" output, even when the commit in question happens to be | |
79 | a tagged version. Instead of just emitting the tag name, it will | |
80 | describe such a commit as v1.2-0-gdeadbee (0th commit since tag v1.2 | |
81 | that points at object deadbee....). | |
82 | ||
83 | --match <pattern>:: | |
84 | Only consider tags matching the given pattern (can be used to avoid | |
85 | leaking private tags made from the repository). | |
86 | ||
87 | --always:: | |
88 | Show uniquely abbreviated commit object as fallback. | |
89 | ||
90 | EXAMPLES | |
91 | -------- | |
92 | ||
93 | With something like git.git current tree, I get: | |
94 | ||
95 | [torvalds@g5 git]$ git describe parent | |
96 | v1.0.4-14-g2414721 | |
97 | ||
98 | i.e. the current head of my "parent" branch is based on v1.0.4, | |
99 | but since it has a few commits on top of that, | |
100 | describe has added the number of additional commits ("14") and | |
101 | an abbreviated object name for the commit itself ("2414721") | |
102 | at the end. | |
103 | ||
104 | The number of additional commits is the number | |
105 | of commits which would be displayed by "git log v1.0.4..parent". | |
106 | The hash suffix is "-g" + 7-char abbreviation for the tip commit | |
107 | of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`). | |
108 | ||
109 | Doing a 'git describe' on a tag-name will just show the tag name: | |
110 | ||
111 | [torvalds@g5 git]$ git describe v1.0.4 | |
112 | v1.0.4 | |
113 | ||
114 | With --all, the command can use branch heads as references, so | |
115 | the output shows the reference path as well: | |
116 | ||
117 | [torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2 | |
118 | tags/v1.0.0-21-g975b | |
119 | ||
120 | [torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^ | |
121 | heads/lt/describe-7-g975b | |
122 | ||
123 | With --abbrev set to 0, the command can be used to find the | |
124 | closest tagname without any suffix: | |
125 | ||
126 | [torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2 | |
127 | tags/v1.0.0 | |
128 | ||
129 | Note that the suffix you get if you type these commands today may be | |
130 | longer than what Linus saw above when he ran these commands, as your | |
131 | git repository may have new commits whose object names begin with | |
132 | 975b that did not exist back then, and "-g975b" suffix alone may not | |
133 | be sufficient to disambiguate these commits. | |
134 | ||
135 | ||
136 | SEARCH STRATEGY | |
137 | --------------- | |
138 | ||
139 | For each committish supplied, 'git describe' will first look for | |
140 | a tag which tags exactly that commit. Annotated tags will always | |
141 | be preferred over lightweight tags, and tags with newer dates will | |
142 | always be preferred over tags with older dates. If an exact match | |
143 | is found, its name will be output and searching will stop. | |
144 | ||
145 | If an exact match was not found, 'git describe' will walk back | |
146 | through the commit history to locate an ancestor commit which | |
147 | has been tagged. The ancestor's tag will be output along with an | |
148 | abbreviation of the input committish's SHA1. | |
149 | ||
150 | If multiple tags were found during the walk then the tag which | |
151 | has the fewest commits different from the input committish will be | |
152 | selected and output. Here fewest commits different is defined as | |
153 | the number of commits which would be shown by `git log tag..input` | |
154 | will be the smallest number of commits possible. | |
155 | ||
156 | ||
157 | Author | |
158 | ------ | |
159 | Written by Linus Torvalds <torvalds@osdl.org>, but somewhat | |
160 | butchered by Junio C Hamano <gitster@pobox.com>. Later significantly | |
161 | updated by Shawn Pearce <spearce@spearce.org>. | |
162 | ||
163 | Documentation | |
164 | -------------- | |
165 | Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>. | |
166 | ||
167 | GIT | |
168 | --- | |
169 | Part of the linkgit:git[1] suite |