git-tag(1)
==========

NAME
----
git-tag - Create, list, delete or verify tags


SYNOPSIS
--------
[synopsis]
git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] [-e]
	[(--trailer <token>[(=|:)<value>])...]
	<tagname> [<commit> | <object>]
git tag -d <tagname>...
git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
	[--points-at <object>] [--column[=<options>] | --no-column]
	[--create-reflog] [--sort=<key>] [--format=<format>]
	[--merged <commit>] [--no-merged <commit>] [<pattern>...]
git tag -v [--format=<format>] <tagname>...

DESCRIPTION
-----------

Add a tag reference in `refs/tags/`, unless `-d`/`-l`/`-v` is given
to delete, list or verify tags.

Unless `-f` is given, the named tag must not yet exist.

If one of `-a`, `-s`, or `-u <key-id>` is passed, the command
creates a 'tag' object, and requires a tag message.  Unless
`-m <msg>` or `-F <file>` is given, an editor is started for the user to type
in the tag message.

If `-m <msg>` or `-F <file>` or `--trailer <token>[=<value>]` is given
and `-a`, `-s`, and `-u <key-id>` are absent, `-a` is implied.

Otherwise, a tag reference that points directly at the given object
(i.e., a lightweight tag) is created.

A cryptographically signed tag object will be created when `-s` or
`-u <key-id>` is used. The signing backend (GPG, X.509, SSH, etc.) is
controlled by the `gpg.format` configuration variable, defaulting to
OpenPGP. When `-u <key-id>` is not used, the committer identity for
the current user is used to find the key for signing. The
configuration variable `gpg.program` is used to specify a custom
signing binary.

Tag objects (created with `-a`, `-s`, or `-u`) are called "annotated"
tags; they contain a creation date, the tagger name and e-mail, a
tagging message, and an optional cryptographic signature. Whereas a
"lightweight" tag is simply a name for an object (usually a commit
object).

Annotated tags are meant for release while lightweight tags are meant
for private or temporary object labels. For this reason, some git
commands for naming objects (like `git describe`) will ignore
lightweight tags by default.


OPTIONS
-------
`-a`::
`--annotate`::
	Make an unsigned, annotated tag object

`-s`::
`--sign`::
	Make a cryptographically signed tag, using the default signing
	key. The signing backend used depends on the `gpg.format`
	configuration variable. The default key is determined by the
	backend. For GPG, it's based on the committer's email address,
	while for SSH it may be a specific key file or agent
	identity. See linkgit:git-config[1].

`--no-sign`::
	Override `tag.gpgSign` configuration variable that is
	set to force each and every tag to be signed.

`-u <key-id>`::
`--local-user=<key-id>`::
	Make a cryptographically signed tag using the given key. The
	format of the <key-id> and the backend used depend on the
	`gpg.format` configuration variable. See
	linkgit:git-config[1].

`-f`::
`--force`::
	Replace an existing tag with the given name (instead of failing)

`-d`::
`--delete`::
	Delete existing tags with the given names.

`-v`::
`--verify`::
	Verify the cryptographic signature of the given tags.

`-n<num>`::
	_<num>_ specifies how many lines from the annotation, if any,
	are printed when using `-l`. Implies `--list`.
+
The default is not to print any annotation lines.
If no number is given to `-n`, only the first line is printed.
If the tag is not annotated, the commit message is displayed instead.

`-l`::
`--list`::
	List tags. With optional `<pattern>...`, e.g. `git tag --list
	'v-*'`, list only the tags that match the pattern(s).
+
Running `git tag` without arguments also lists all tags. The pattern
is a shell wildcard (i.e., matched using `fnmatch`(3)). Multiple
patterns may be given; if any of them matches, the tag is shown.
+
This option is implicitly supplied if any other list-like option such
as `--contains` is provided. See the documentation for each of those
options for details.

`--sort=<key>`::
	Sort based on the key given.  Prefix `-` to sort in
	descending order of the value. You may use the `--sort=<key>` option
	multiple times, in which case the last _<key>_ becomes the primary
	key. Also supports "`version:refname`" or "`v:refname`" (tag
	names are treated as versions). The "`version:refname`" sort
	order can also be affected by the "`versionsort.suffix`"
	configuration variable.
	The keys supported are the same as those in `git for-each-ref`.
	Sort order defaults to the value configured for the `tag.sort`
	variable if it exists, or lexicographic order otherwise. See
	linkgit:git-config[1].

`--color[=<when>]`::
	Respect any colors specified in the `--format` option. The
	_<when>_ field must be one of `always`, `never`, or `auto` (if
	_<when>_ is absent, behave as if `always` was given).

`-i`::
`--ignore-case`::
	Sorting and filtering tags are case insensitive.

`--omit-empty`::
	Do not print a newline after formatted refs where the format expands
	to the empty string.

`--column[=<options>]`::
`--no-column`::
	Display tag listing in columns. See configuration variable
	`column.tag` for option syntax. `--column` and `--no-column`
	without options are equivalent to `always` and `never` respectively.
+
This option is only applicable when listing tags without annotation lines.

`--contains [<commit>]`::
	Only list tags which contain _<commit>_ (`HEAD` if not
	specified). Implies `--list`.

`--no-contains [<commit>]`::
	Only list tags which don't contain _<commit>_ (`HEAD` if
	not specified). Implies `--list`.

`--merged [<commit>]`::
	Only list tags whose commits are reachable from
	_<commit>_ (`HEAD` if not specified).

`--no-merged [<commit>]`::
	Only list tags whose commits are not reachable from
	_<commit>_ (`HEAD` if not specified).

`--points-at [<object>]`::
	Only list tags of _<object>_ (`HEAD` if not
	specified). Implies `--list`.

`-m <msg>`::
`--message=<msg>`::
	Use _<msg>_ (instead of prompting).
	If multiple `-m` options are given, their values are
	concatenated as separate paragraphs.
	Implies `-a` if none of `-a`, `-s`, or `-u <key-id>`
	is given.

`-F <file>`::
`--file=<file>`::
	Take the tag message from _<file>_.  Use `-` to
	read the message from the standard input.
	Implies `-a` if none of `-a`, `-s`, or `-u <key-id>`
	is given.

`--trailer <token>[(=|:)<value>]`::
	Specify a (_<token>_, _<value>_) pair that should be applied as a
	trailer. (e.g. `git tag --trailer "Custom-Key: value"`
	will add a "Custom-Key" trailer to the tag message.)
	The `trailer.*` configuration variables
	(linkgit:git-interpret-trailers[1]) can be used to define if
	a duplicated trailer is omitted, where in the run of trailers
	each trailer would appear, and other details.
	The trailers can be extracted in `git tag --list`, using
	`--format="%(trailers)"` placeholder.

`-e`::
`--edit`::
	Let further edit the message taken from file with `-F` and command line with
	`-m`.

`--cleanup=<mode>`::
	Set how the tag message is cleaned up.
	The  _<mode>_ can be one of `verbatim`, `whitespace` and `strip`.  The
	`strip` mode is default. The `verbatim` mode does not change message at
	all, `whitespace` removes just leading/trailing whitespace lines and
	`strip` removes both whitespace and commentary.

`--create-reflog`::
	Create a reflog for the tag. To globally enable reflogs for tags, see
	`core.logAllRefUpdates` in linkgit:git-config[1].
	The negated form `--no-create-reflog` only overrides an earlier
	`--create-reflog`, but currently does not negate the setting of
	`core.logAllRefUpdates`.

`--format=<format>`::
	A string that interpolates `%(fieldname)` from a tag ref being shown
	and the object it points at.  The format is the same as
	that of linkgit:git-for-each-ref[1].  When unspecified,
	defaults to `%(refname:strip=2)`.

_<tagname>_::
	The name of the tag to create, delete, or describe.
	The new tag name must pass all checks defined by
	linkgit:git-check-ref-format[1].  Some of these checks
	may restrict the characters allowed in a tag name.

_<commit>_::
_<object>_::
	The object that the new tag will refer to, usually a commit.
	Defaults to `HEAD`.

CONFIGURATION
-------------
By default, `git tag` in sign-with-default mode (`-s`) will use your
committer identity (of the form `Your Name <your@email.address>`) to
find a key.  If you want to use a different default key, you can specify
it in the repository configuration as follows:

-------------------------------------
[user]
    signingKey = <key-id>
-------------------------------------

The signing backend can be chosen via the `gpg.format` configuration
variable, which defaults to `openpgp`. See linkgit:git-config[1]
for a list of other supported formats.

The path to the program used for each signing backend can be specified
with the `gpg.<format>.program` configuration variable. For the
`openpgp` backend, `gpg.program` can be used as a synonym for
`gpg.openpgp.program`. See linkgit:git-config[1] for details.

`pager.tag` is only respected when listing tags, i.e., when `-l` is
used or implied. The default is to use a pager.

See linkgit:git-config[1] for more details and other configuration
variables.

DISCUSSION
----------

On Re-tagging
~~~~~~~~~~~~~

What should you do when you tag a wrong commit and you would
want to re-tag?

If you never pushed anything out, just re-tag it. Use `-f` to
replace the old one. And you're done.

But if you have pushed things out (or others could just read
your repository directly), then others will have already seen
the old tag. In that case you can do one of two things:

. The sane thing.
  Just admit you screwed up, and use a different name. Others have
  already seen one tag-name, and if you keep the same name, you
  may be in the situation that two people both have "version X",
  but they actually have 'different' "X"'s.  So just call it "X.1"
  and be done with it.

. The insane thing.
  You really want to call the new version "X" too, 'even though'
  others have already seen the old one. So just use `git tag -f`
  again, as if you hadn't already published the old one.

However, Git does *not* (and it should not) change tags behind
users back. So if somebody already got the old tag, doing a
`git pull` on your tree shouldn't just make them overwrite the old
one.

If somebody got a release tag from you, you cannot just change
the tag for them by updating your own one. This is a big
security issue, in that people MUST be able to trust their
tag-names.  If you really want to do the insane thing, you need
to just fess up to it, and tell people that you messed up. You
can do that by making a very public announcement saying:

------------
Ok, I messed up, and I pushed out an earlier version tagged as X. I
then fixed something, and retagged the *fixed* tree as X again.

If you got the wrong tag, and want the new one, please delete
the old one and fetch the new one by doing:

	git tag -d X
	git fetch origin tag X

to get my updated tag.

You can test which tag you have by doing

	git rev-parse X

which should return 0123456789abcdef.. if you have the new version.

Sorry for the inconvenience.
------------

Does this seem a bit complicated?  It *should* be. There is no
way that it would be correct to just "fix" it automatically.
People need to know that their tags might have been changed.


On Automatic following
~~~~~~~~~~~~~~~~~~~~~~

If you are following somebody else's tree, you are most likely
using remote-tracking branches (eg. `refs/remotes/origin/master`).
You usually want the tags from the other end.

On the other hand, if you are fetching because you would want a
one-shot merge from somebody else, you typically do not want to
get tags from there.  This happens more often for people near
the toplevel but not limited to them.  Mere mortals when pulling
from each other do not necessarily want to automatically get
private anchor point tags from the other person.

Often, "please pull" messages on the mailing list just provide
two pieces of information: a repo URL and a branch name; this
is designed to be easily cut&pasted at the end of a `git fetch`
command line:

------------
Linus, please pull from

	git://git..../proj.git master

to get the following updates...
------------

becomes:

------------
$ git pull git://git..../proj.git master
------------

In such a case, you do not want to automatically follow the other
person's tags.

One important aspect of Git is its distributed nature, which
largely means there is no inherent "upstream" or
"downstream" in the system.  On the face of it, the above
example might seem to indicate that the tag namespace is owned
by the upper echelon of people and that tags only flow downwards, but
that is not the case.  It only shows that the usage pattern
determines who are interested in whose tags.

A one-shot pull is a sign that a commit history is now crossing
the boundary between one circle of people (e.g. "people who are
primarily interested in the networking part of the kernel") who may
have their own set of tags (e.g. "this is the third release
candidate from the networking group to be proposed for general
consumption with 2.6.21 release") to another circle of people
(e.g. "people who integrate various subsystem improvements").
The latter are usually not interested in the detailed tags used
internally in the former group (that is what "internal" means).
That is why it is desirable not to follow tags automatically in
this case.

It may well be that among networking people, they may want to
exchange the tags internal to their group, but in that workflow
they are most likely tracking each other's progress by
having remote-tracking branches.  Again, the heuristic to automatically
follow such tags is a good thing.


On Backdating Tags
~~~~~~~~~~~~~~~~~~

If you have imported some changes from another VCS and would like
to add tags for major releases of your work, it is useful to be able
to specify the date to embed inside of the tag object; such data in
the tag object affects, for example, the ordering of tags in the
gitweb interface.

To set the date used in future tag objects, set the environment
variable GIT_COMMITTER_DATE (see the later discussion of possible
values; the most common form is "YYYY-MM-DD HH:MM").

For example:

------------
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1
------------

include::date-formats.adoc[]

FILES
-----

`$GIT_DIR/TAG_EDITMSG`::
	This file contains the message of an in-progress annotated
	tag. If `git tag` exits due to an error before creating an
	annotated tag then the tag message that has been provided by the
	user in an editor session will be available in this file, but
	may be overwritten by the next invocation of `git tag`.

CONFIGURATION
-------------

include::includes/cmd-config-section-all.adoc[]

:git-tag: 1
include::config/tag.adoc[]

NOTES
-----

include::ref-reachability-filters.adoc[]

SEE ALSO
--------
linkgit:git-check-ref-format[1].
linkgit:git-config[1].

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