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