]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-tag.txt
tag.c: use 'ref-filter' APIs
[thirdparty/git.git] / Documentation / git-tag.txt
CommitLineData
215a7ad1
JH
1git-tag(1)
2==========
2cf565c5
DG
3
4NAME
5----
453c1e85 6git-tag - Create, list, delete or verify a tag object signed with GPG
2cf565c5
DG
7
8
2cf565c5
DG
9SYNOPSIS
10--------
b867c7c2 11[verse]
a2d07d80 12'git tag' [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]
b85e6c5f
NS
13 <tagname> [<commit> | <object>]
14'git tag' -d <tagname>...
ae7706b9 15'git tag' [-n[<num>]] -l [--contains <commit>] [--points-at <object>]
b7cc53e9 16 [--column[=<options>] | --no-column] [--create-reflog] [--sort=<key>] [<pattern>...]
b85e6c5f 17'git tag' -v <tagname>...
2cf565c5
DG
18
19DESCRIPTION
20-----------
18b07930 21
831e61f8 22Add a tag reference in `refs/tags/`, unless `-d/-l/-v` is given
cfb5e6b2 23to delete, list or verify tags.
b7e438f9 24
831e61f8 25Unless `-f` is given, the named tag must not yet exist.
b7e438f9 26
bc162e40 27If one of `-a`, `-s`, or `-u <key-id>` is passed, the command
cfb5e6b2 28creates a 'tag' object, and requires a tag message. Unless
62e09ce9 29`-m <msg>` or `-F <file>` is given, an editor is started for the user to type
bc162e40 30in the tag message.
b7e438f9 31
995e8df4
DS
32If `-m <msg>` or `-F <file>` is given and `-a`, `-s`, and `-u <key-id>`
33are absent, `-a` is implied.
34
d5fa1f1a 35Otherwise just a tag reference for the SHA-1 object name of the commit object is
cfb5e6b2 36created (i.e. a lightweight tag).
bc162e40
LT
37
38A GnuPG signed tag object will be created when `-s` or `-u
39<key-id>` is used. When `-u <key-id>` is not used, the
40committer identity for the current user is used to find the
0c5e70f0
JH
41GnuPG key for signing. The configuration variable `gpg.program`
42is used to specify custom GnuPG binary.
43
eeff891a 44Tag objects (created with `-a`, `-s`, or `-u`) are called "annotated"
29d55538
DS
45tags; they contain a creation date, the tagger name and e-mail, a
46tagging message, and an optional GnuPG signature. Whereas a
47"lightweight" tag is simply a name for an object (usually a commit
48object).
49
50Annotated tags are meant for release while lightweight tags are meant
51for private or temporary object labels. For this reason, some git
52commands for naming objects (like `git describe`) will ignore
53lightweight tags by default.
54
2cf565c5 55
d839091d
NW
56OPTIONS
57-------
58-a::
c97eff5a 59--annotate::
d839091d
NW
60 Make an unsigned, annotated tag object
61
62-s::
c97eff5a 63--sign::
0c5e70f0 64 Make a GPG-signed tag, using the default e-mail address's key.
d839091d
NW
65
66-u <key-id>::
c97eff5a 67--local-user=<key-id>::
0c5e70f0 68 Make a GPG-signed tag, using the given key.
d839091d
NW
69
70-f::
f7aec129 71--force::
d839091d
NW
72 Replace an existing tag with the given name (instead of failing)
73
74-d::
c97eff5a 75--delete::
453c1e85 76 Delete existing tags with the given names.
d839091d 77
0bc72abd 78-v::
c97eff5a 79--verify::
62e09ce9 80 Verify the gpg signature of the given tag names.
0bc72abd 81
3f36cbba 82-n<num>::
980ea5c5
MM
83 <num> specifies how many lines from the annotation, if any,
84 are printed when using -l.
85 The default is not to print any annotation lines.
62e09ce9 86 If no number is given to `-n`, only the first line is printed.
abfd5fa8 87 If the tag is not annotated, the commit message is displayed instead.
980ea5c5 88
b867c7c2 89-l <pattern>::
c97eff5a 90--list <pattern>::
588d0e83
JK
91 List tags with names that match the given pattern (or all if no
92 pattern is given). Running "git tag" without arguments also
93 lists all tags. The pattern is a shell wildcard (i.e., matched
94 using fnmatch(3)). Multiple patterns may be given; if any of
95 them matches, the tag is shown.
b867c7c2 96
b7cc53e9
KN
97--sort=<key>::
98 Sort based on the key given. Prefix `-` to sort in
99 descending order of the value. You may use the --sort=<key> option
100 multiple times, in which case the last key becomes the primary
101 key. Also supports "version:refname" or "v:refname" (tag
64f7a264
MH
102 names are treated as versions). The "version:refname" sort
103 order can also be affected by the
b7cc53e9
KN
104 "versionsort.prereleaseSuffix" configuration variable.
105 The keys supported are the same as those in `git for-each-ref`.
106 Sort order defaults to the value configured for the 'tag.sort'
64f7a264
MH
107 variable if it exists, or lexicographic order otherwise. See
108 linkgit:git-config[1].
9ef176b5 109
d96e3c15
NTND
110--column[=<options>]::
111--no-column::
112 Display tag listing in columns. See configuration variable
113 column.tag for option syntax.`--column` and `--no-column`
114 without options are equivalent to 'always' and 'never' respectively.
115+
116This option is only applicable when listing tags without annotation lines.
117
81966ab2
NTND
118--contains [<commit>]::
119 Only list tags which contain the specified commit (HEAD if not
120 specified).
32c35cfb 121
ae7706b9
TG
122--points-at <object>::
123 Only list tags of the given object.
124
d839091d 125-m <msg>::
c97eff5a 126--message=<msg>::
bd46c9a9 127 Use the given tag message (instead of prompting).
d99bf51a 128 If multiple `-m` options are given, their values are
bd46c9a9 129 concatenated as separate paragraphs.
995e8df4
DS
130 Implies `-a` if none of `-a`, `-s`, or `-u <key-id>`
131 is given.
d839091d 132
f79c73ce 133-F <file>::
c97eff5a 134--file=<file>::
f79c73ce
JS
135 Take the tag message from the given file. Use '-' to
136 read the message from the standard input.
995e8df4
DS
137 Implies `-a` if none of `-a`, `-s`, or `-u <key-id>`
138 is given.
2cf565c5 139
d3e05983
KS
140--cleanup=<mode>::
141 This option sets how the tag message is cleaned up.
142 The '<mode>' can be one of 'verbatim', 'whitespace' and 'strip'. The
143 'strip' mode is default. The 'verbatim' mode does not change message at
144 all, 'whitespace' removes just leading/trailing whitespace lines and
145 'strip' removes both whitespace and commentary.
146
144c76fa
DT
147--create-reflog::
148 Create a reflog for the tag.
149
b85e6c5f
NS
150<tagname>::
151 The name of the tag to create, delete, or describe.
152 The new tag name must pass all checks defined by
153 linkgit:git-check-ref-format[1]. Some of these checks
154 may restrict the characters allowed in a tag name.
155
dd686cd4
TR
156<commit>::
157<object>::
158 The object that the new tag will refer to, usually a commit.
159 Defaults to HEAD.
160
161
d67778ec
AP
162CONFIGURATION
163-------------
0b444cdb 164By default, 'git tag' in sign-with-default mode (-s) will use your
d595bdc1 165committer identity (of the form `Your Name <your@email.address>`) to
d67778ec
AP
166find a key. If you want to use a different default key, you can specify
167it in the repository configuration as follows:
168
86b9e017 169-------------------------------------
d67778ec 170[user]
da0005b8 171 signingKey = <gpg-key-id>
86b9e017 172-------------------------------------
d67778ec 173
4853534e
JH
174
175DISCUSSION
176----------
177
178On Re-tagging
179~~~~~~~~~~~~~
180
181What should you do when you tag a wrong commit and you would
182want to re-tag?
183
184If you never pushed anything out, just re-tag it. Use "-f" to
185replace the old one. And you're done.
186
187But if you have pushed things out (or others could just read
188your repository directly), then others will have already seen
189the old tag. In that case you can do one of two things:
190
191. The sane thing.
192Just admit you screwed up, and use a different name. Others have
193already seen one tag-name, and if you keep the same name, you
194may be in the situation that two people both have "version X",
195but they actually have 'different' "X"'s. So just call it "X.1"
196and be done with it.
197
198. The insane thing.
199You really want to call the new version "X" too, 'even though'
0b444cdb 200others have already seen the old one. So just use 'git tag -f'
4853534e
JH
201again, as if you hadn't already published the old one.
202
06ada152 203However, Git does *not* (and it should not) change tags behind
46e56e81 204users back. So if somebody already got the old tag, doing a
0b444cdb 205'git pull' on your tree shouldn't just make them overwrite the old
4853534e
JH
206one.
207
208If somebody got a release tag from you, you cannot just change
209the tag for them by updating your own one. This is a big
210security issue, in that people MUST be able to trust their
211tag-names. If you really want to do the insane thing, you need
212to just fess up to it, and tell people that you messed up. You
213can do that by making a very public announcement saying:
214
215------------
216Ok, I messed up, and I pushed out an earlier version tagged as X. I
217then fixed something, and retagged the *fixed* tree as X again.
218
219If you got the wrong tag, and want the new one, please delete
220the old one and fetch the new one by doing:
221
222 git tag -d X
223 git fetch origin tag X
224
225to get my updated tag.
226
227You can test which tag you have by doing
228
229 git rev-parse X
230
231which should return 0123456789abcdef.. if you have the new version.
232
f1723ee6 233Sorry for the inconvenience.
4853534e
JH
234------------
235
236Does this seem a bit complicated? It *should* be. There is no
f1723ee6
MW
237way that it would be correct to just "fix" it automatically.
238People need to know that their tags might have been changed.
4853534e
JH
239
240
241On Automatic following
242~~~~~~~~~~~~~~~~~~~~~~
243
244If you are following somebody else's tree, you are most likely
8b3f3f84 245using remote-tracking branches (`refs/heads/origin` in traditional
4853534e
JH
246layout, or `refs/remotes/origin/master` in the separate-remote
247layout). You usually want the tags from the other end.
248
249On the other hand, if you are fetching because you would want a
250one-shot merge from somebody else, you typically do not want to
251get tags from there. This happens more often for people near
252the toplevel but not limited to them. Mere mortals when pulling
253from each other do not necessarily want to automatically get
254private anchor point tags from the other person.
255
f1723ee6
MW
256Often, "please pull" messages on the mailing list just provide
257two pieces of information: a repo URL and a branch name; this
258is designed to be easily cut&pasted at the end of a 'git fetch'
259command line:
4853534e
JH
260
261------------
262Linus, please pull from
263
264 git://git..../proj.git master
265
266to get the following updates...
267------------
268
269becomes:
270
271------------
272$ git pull git://git..../proj.git master
273------------
274
f1723ee6
MW
275In such a case, you do not want to automatically follow the other
276person's tags.
4853534e 277
2de9b711 278One important aspect of Git is its distributed nature, which
f1723ee6 279largely means there is no inherent "upstream" or
4853534e
JH
280"downstream" in the system. On the face of it, the above
281example might seem to indicate that the tag namespace is owned
f1723ee6 282by the upper echelon of people and that tags only flow downwards, but
4853534e
JH
283that is not the case. It only shows that the usage pattern
284determines who are interested in whose tags.
285
286A one-shot pull is a sign that a commit history is now crossing
287the boundary between one circle of people (e.g. "people who are
d99bf51a 288primarily interested in the networking part of the kernel") who may
4853534e
JH
289have their own set of tags (e.g. "this is the third release
290candidate from the networking group to be proposed for general
291consumption with 2.6.21 release") to another circle of people
292(e.g. "people who integrate various subsystem improvements").
293The latter are usually not interested in the detailed tags used
294internally in the former group (that is what "internal" means).
295That is why it is desirable not to follow tags automatically in
296this case.
297
298It may well be that among networking people, they may want to
299exchange the tags internal to their group, but in that workflow
f1723ee6 300they are most likely tracking each other's progress by
8b3f3f84 301having remote-tracking branches. Again, the heuristic to automatically
4853534e
JH
302follow such tags is a good thing.
303
304
5040beff
MO
305On Backdating Tags
306~~~~~~~~~~~~~~~~~~
307
308If you have imported some changes from another VCS and would like
309to add tags for major releases of your work, it is useful to be able
f1723ee6 310to specify the date to embed inside of the tag object; such data in
5040beff
MO
311the tag object affects, for example, the ordering of tags in the
312gitweb interface.
313
314To set the date used in future tag objects, set the environment
f1723ee6
MW
315variable GIT_COMMITTER_DATE (see the later discussion of possible
316values; the most common form is "YYYY-MM-DD HH:MM").
5040beff 317
f1723ee6 318For example:
5040beff
MO
319
320------------
055b6615 321$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1
5040beff
MO
322------------
323
f1723ee6 324include::date-formats.txt[]
5040beff 325
b85e6c5f
NS
326SEE ALSO
327--------
328linkgit:git-check-ref-format[1].
b150794d 329linkgit:git-config[1].
b85e6c5f 330
2cf565c5
DG
331GIT
332---
9e1f0a85 333Part of the linkgit:git[1] suite