1 <?xml version=
"1.0" encoding=
"UTF-8"?>
2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en">
6 <meta http-equiv=
"Content-Type" content=
"application/xhtml+xml; charset=UTF-8" />
7 <meta name=
"generator" content=
"AsciiDoc 10.2.0" />
8 <title>git-tag(
1)
</title>
9 <style type=
"text/css">
10 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
14 font-family: Georgia,serif;
18 h1, h2, h3, h4, h5, h6,
19 div.title, caption.title,
20 thead, p.table.header,
22 #author, #revnumber, #revdate, #revremark,
24 font-family: Arial,Helvetica,sans-serif;
28 margin:
1em
5%
1em
5%;
33 text-decoration: underline;
49 h1, h2, h3, h4, h5, h6 {
57 border-bottom:
2px solid silver;
77 border:
1px solid silver;
88 ul
> li { color: #aaa; }
89 ul
> li
> * { color: black; }
91 .monospaced, code, pre {
92 font-family:
"Courier New", Courier, monospace;
99 white-space: pre-wrap;
109 #revnumber, #revdate, #revremark {
114 border-top:
2px solid silver;
120 padding-bottom:
0.5em;
124 padding-bottom:
0.5em;
129 margin-bottom:
1.5em;
131 div.imageblock, div.exampleblock, div.verseblock,
132 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
133 div.admonitionblock {
135 margin-bottom:
1.5em;
137 div.admonitionblock {
139 margin-bottom:
2.0em;
144 div.content { /* Block element content. */
148 /* Block element titles. */
149 div.title, caption.title {
154 margin-bottom:
0.5em;
160 td div.title:first-child {
163 div.content div.title:first-child {
166 div.content + div.title {
170 div.sidebarblock
> div.content {
172 border:
1px solid #dddddd;
173 border-left:
4px solid #f0f0f0;
177 div.listingblock
> div.content {
178 border:
1px solid #dddddd;
179 border-left:
5px solid #f0f0f0;
184 div.quoteblock, div.verseblock {
188 border-left:
5px solid #f0f0f0;
192 div.quoteblock
> div.attribution {
197 div.verseblock
> pre.content {
198 font-family: inherit;
201 div.verseblock
> div.attribution {
205 /* DEPRECATED: Pre version
8.2.7 verse style literal block. */
206 div.verseblock + div.attribution {
210 div.admonitionblock .icon {
214 text-decoration: underline;
216 padding-right:
0.5em;
218 div.admonitionblock td.content {
220 border-left:
3px solid #dddddd;
223 div.exampleblock
> div.content {
224 border-left:
3px solid #dddddd;
228 div.imageblock div.content { padding-left:
0; }
229 span.image img { border-style: none; vertical-align: text-bottom; }
230 a.image:visited { color: white; }
234 margin-bottom:
0.8em;
247 list-style-position: outside;
250 list-style-type: decimal;
253 list-style-type: lower-alpha;
256 list-style-type: upper-alpha;
259 list-style-type: lower-roman;
262 list-style-type: upper-roman;
265 div.compact ul, div.compact ol,
266 div.compact p, div.compact p,
267 div.compact div, div.compact div {
269 margin-bottom:
0.1em;
281 margin-bottom:
0.8em;
284 padding-bottom:
15px;
286 dt.hdlist1.strong, td.hdlist1.strong {
292 padding-right:
0.8em;
298 div.hdlist.compact tr {
307 .footnote, .footnoteref {
311 span.footnote, span.footnoteref {
312 vertical-align: super;
316 margin:
20px
0 20px
0;
320 #footnotes div.footnote {
326 border-top:
1px solid silver;
335 padding-right:
0.5em;
336 padding-bottom:
0.3em;
344 #footer-badges { display: none; }
348 margin-bottom:
2.5em;
356 margin-bottom:
0.1em;
359 div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
376 span.aqua { color: aqua; }
377 span.black { color: black; }
378 span.blue { color: blue; }
379 span.fuchsia { color: fuchsia; }
380 span.gray { color: gray; }
381 span.green { color: green; }
382 span.lime { color: lime; }
383 span.maroon { color: maroon; }
384 span.navy { color: navy; }
385 span.olive { color: olive; }
386 span.purple { color: purple; }
387 span.red { color: red; }
388 span.silver { color: silver; }
389 span.teal { color: teal; }
390 span.white { color: white; }
391 span.yellow { color: yellow; }
393 span.aqua-background { background: aqua; }
394 span.black-background { background: black; }
395 span.blue-background { background: blue; }
396 span.fuchsia-background { background: fuchsia; }
397 span.gray-background { background: gray; }
398 span.green-background { background: green; }
399 span.lime-background { background: lime; }
400 span.maroon-background { background: maroon; }
401 span.navy-background { background: navy; }
402 span.olive-background { background: olive; }
403 span.purple-background { background: purple; }
404 span.red-background { background: red; }
405 span.silver-background { background: silver; }
406 span.teal-background { background: teal; }
407 span.white-background { background: white; }
408 span.yellow-background { background: yellow; }
410 span.big { font-size:
2em; }
411 span.small { font-size:
0.6em; }
413 span.underline { text-decoration: underline; }
414 span.overline { text-decoration: overline; }
415 span.line-through { text-decoration: line-through; }
417 div.unbreakable { page-break-inside: avoid; }
427 margin-bottom:
1.5em;
429 div.tableblock
> table {
430 border:
3px solid #
527bbd;
432 thead, p.table.header {
439 /* Because the table frame attribute is overridden by CSS in most browsers. */
440 div.tableblock
> table[
frame=
"void"] {
443 div.tableblock
> table[
frame=
"hsides"] {
444 border-left-style: none;
445 border-right-style: none;
447 div.tableblock
> table[
frame=
"vsides"] {
448 border-top-style: none;
449 border-bottom-style: none;
460 margin-bottom:
1.5em;
462 thead, p.tableblock.header {
473 border-color: #
527bbd;
474 border-collapse: collapse;
476 th.tableblock, td.tableblock {
480 border-color: #
527bbd;
483 table.tableblock.frame-topbot {
484 border-left-style: hidden;
485 border-right-style: hidden;
487 table.tableblock.frame-sides {
488 border-top-style: hidden;
489 border-bottom-style: hidden;
491 table.tableblock.frame-none {
492 border-style: hidden;
495 th.tableblock.halign-left, td.tableblock.halign-left {
498 th.tableblock.halign-center, td.tableblock.halign-center {
501 th.tableblock.halign-right, td.tableblock.halign-right {
505 th.tableblock.valign-top, td.tableblock.valign-top {
508 th.tableblock.valign-middle, td.tableblock.valign-middle {
509 vertical-align: middle;
511 th.tableblock.valign-bottom, td.tableblock.valign-bottom {
512 vertical-align: bottom;
523 padding-bottom:
0.5em;
524 border-top:
2px solid silver;
525 border-bottom:
2px solid silver;
530 body.manpage div.sectionbody {
535 body.manpage div#toc { display: none; }
540 <script type=
"text/javascript">
542 var asciidoc = { // Namespace.
544 /////////////////////////////////////////////////////////////////////
545 // Table Of Contents generator
546 /////////////////////////////////////////////////////////////////////
548 /* Author: Mihai Bazon, September
2002
549 * http://students.infoiasi.ro/~mishoo
551 * Table Of Content generator
554 * Feel free to use this script under the terms of the GNU General Public
555 * License, as long as you do not remove or alter this notice.
558 /* modified by Troy D. Hanson, September
2006. License: GPL */
559 /* modified by Stuart Rackham,
2006,
2009. License: GPL */
562 toc: function (toclevels) {
564 function getText(el) {
566 for (var i = el.firstChild; i != null; i = i.nextSibling) {
567 if (i.nodeType ==
3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
569 else if (i.firstChild != null)
575 function TocEntry(el, text, toclevel) {
578 this.toclevel = toclevel;
581 function tocEntries(el, toclevels) {
582 var result = new Array;
583 var re = new RegExp('[hH]([
1-'+(toclevels+
1)+'])');
584 // Function that scans the DOM tree for header elements (the DOM2
585 // nodeIterator API would be a better technique but not supported by all
587 var iterate = function (el) {
588 for (var i = el.firstChild; i != null; i = i.nextSibling) {
589 if (i.nodeType ==
1 /* Node.ELEMENT_NODE */) {
590 var mo = re.exec(i.tagName);
591 if (mo && (i.getAttribute(
"class") || i.getAttribute(
"className")) !=
"float") {
592 result[result.length] = new TocEntry(i, getText(i), mo[
1]-
1);
602 var toc = document.getElementById(
"toc");
607 // Delete existing TOC entries in case we're reloading the TOC.
608 var tocEntriesToRemove = [];
610 for (i =
0; i < toc.childNodes.length; i++) {
611 var entry = toc.childNodes[i];
612 if (entry.nodeName.toLowerCase() == 'div'
613 && entry.getAttribute(
"class")
614 && entry.getAttribute(
"class").match(/^toclevel/))
615 tocEntriesToRemove.push(entry);
617 for (i =
0; i < tocEntriesToRemove.length; i++) {
618 toc.removeChild(tocEntriesToRemove[i]);
621 // Rebuild TOC entries.
622 var entries = tocEntries(document.getElementById(
"content"), toclevels);
623 for (var i =
0; i < entries.length; ++i) {
624 var entry = entries[i];
625 if (entry.element.id ==
"")
626 entry.element.id =
"_toc_" + i;
627 var a = document.createElement(
"a");
628 a.href =
"#" + entry.element.id;
629 a.appendChild(document.createTextNode(entry.text));
630 var div = document.createElement(
"div");
632 div.className =
"toclevel" + entry.toclevel;
633 toc.appendChild(div);
635 if (entries.length ==
0)
636 toc.parentNode.removeChild(toc);
640 /////////////////////////////////////////////////////////////////////
641 // Footnotes generator
642 /////////////////////////////////////////////////////////////////////
644 /* Based on footnote generation code from:
645 * http://www.brandspankingnew.net/archive/
2005/
07/format_footnote.html
648 footnotes: function () {
649 // Delete existing footnote entries in case we're reloading the footnodes.
651 var noteholder = document.getElementById(
"footnotes");
655 var entriesToRemove = [];
656 for (i =
0; i < noteholder.childNodes.length; i++) {
657 var entry = noteholder.childNodes[i];
658 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute(
"class") ==
"footnote")
659 entriesToRemove.push(entry);
661 for (i =
0; i < entriesToRemove.length; i++) {
662 noteholder.removeChild(entriesToRemove[i]);
665 // Rebuild footnote entries.
666 var cont = document.getElementById(
"content");
667 var spans = cont.getElementsByTagName(
"span");
670 for (i=
0; i
<spans.length; i++) {
671 if (spans[i].className ==
"footnote") {
673 var note = spans[i].getAttribute(
"data-note");
675 // Use [\s\S] in place of . so multi-line matches work.
676 // Because JavaScript has no s (dotall) regex flag.
677 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[
1];
679 "[<a id='_footnoteref_" + n +
"' href='#_footnote_" + n +
680 "' title='View footnote' class='footnote'>" + n +
"</a>]";
681 spans[i].setAttribute(
"data-note", note);
683 noteholder.innerHTML +=
684 "<div class='footnote' id='_footnote_" + n +
"'>" +
685 "<a href='#_footnoteref_" + n +
"' title='Return to text'>" +
686 n +
"</a>. " + note +
"</div>";
687 var id =spans[i].getAttribute(
"id");
688 if (id != null) refs[
"#"+id] = n;
692 noteholder.parentNode.removeChild(noteholder);
694 // Process footnoterefs.
695 for (i=
0; i
<spans.length; i++) {
696 if (spans[i].className ==
"footnoteref") {
697 var href = spans[i].getElementsByTagName(
"a")[
0].getAttribute(
"href");
698 href = href.match(/#.*/)[
0]; // Because IE return full URL.
701 "[<a href='#_footnote_" + n +
702 "' title='View footnote' class='footnote'>" + n +
"</a>]";
708 install: function(toclevels) {
711 function reinstall() {
712 asciidoc.footnotes();
714 asciidoc.toc(toclevels);
718 function reinstallAndRemoveTimer() {
719 clearInterval(timerId);
723 timerId = setInterval(reinstall,
500);
724 if (document.addEventListener)
725 document.addEventListener(
"DOMContentLoaded", reinstallAndRemoveTimer, false);
727 window.onload = reinstallAndRemoveTimer;
735 <body class=
"manpage">
738 git-tag(
1) Manual Page
741 <div class=
"sectionbody">
743 Create, list, delete or verify a tag object signed with GPG
749 <h2 id=
"_synopsis">SYNOPSIS
</h2>
750 <div class=
"sectionbody">
751 <div class=
"verseblock">
752 <pre class=
"content"><em>git tag
</em> [-a | -s | -u
<key-id
>] [-f] [-m
<msg
> | -F
<file
>] [-e]
753 <tagname
> [
<commit
> |
<object
>]
754 <em>git tag
</em> -d
<tagname
>…
755 <em>git tag
</em> [-n[
<num
>]] -l [--contains
<commit
>] [--no-contains
<commit
>]
756 [--points-at
<object
>] [--column[=
<options
>] | --no-column]
757 [--create-reflog] [--sort=
<key
>] [--format=
<format
>]
758 [--merged
<commit
>] [--no-merged
<commit
>] [
<pattern
>…]
759 <em>git tag
</em> -v [--format=
<format
>]
<tagname
>…</pre>
760 <div class=
"attribution">
765 <h2 id=
"_description">DESCRIPTION
</h2>
766 <div class=
"sectionbody">
767 <div class=
"paragraph"><p>Add a tag reference in
<code>refs/tags/
</code>, unless
<code>-d/-l/-v
</code> is given
768 to delete, list or verify tags.
</p></div>
769 <div class=
"paragraph"><p>Unless
<code>-f
</code> is given, the named tag must not yet exist.
</p></div>
770 <div class=
"paragraph"><p>If one of
<code>-a
</code>,
<code>-s
</code>, or
<code>-u
<key-id
></code> is passed, the command
771 creates a
<em>tag
</em> object, and requires a tag message. Unless
772 <code>-m
<msg
></code> or
<code>-F
<file
></code> is given, an editor is started for the user to type
773 in the tag message.
</p></div>
774 <div class=
"paragraph"><p>If
<code>-m
<msg
></code> or
<code>-F
<file
></code> is given and
<code>-a
</code>,
<code>-s
</code>, and
<code>-u
<key-id
></code>
775 are absent,
<code>-a
</code> is implied.
</p></div>
776 <div class=
"paragraph"><p>Otherwise, a tag reference that points directly at the given object
777 (i.e., a lightweight tag) is created.
</p></div>
778 <div class=
"paragraph"><p>A GnuPG signed tag object will be created when
<code>-s
</code> or
<code>-u
779 <key-id
></code> is used. When
<code>-u
<key-id
></code> is not used, the
780 committer identity for the current user is used to find the
781 GnuPG key for signing. The configuration variable
<code>gpg.program
</code>
782 is used to specify custom GnuPG binary.
</p></div>
783 <div class=
"paragraph"><p>Tag objects (created with
<code>-a
</code>,
<code>-s
</code>, or
<code>-u
</code>) are called
"annotated"
784 tags; they contain a creation date, the tagger name and e-mail, a
785 tagging message, and an optional GnuPG signature. Whereas a
786 "lightweight" tag is simply a name for an object (usually a commit
788 <div class=
"paragraph"><p>Annotated tags are meant for release while lightweight tags are meant
789 for private or temporary object labels. For this reason, some git
790 commands for naming objects (like
<code>git describe
</code>) will ignore
791 lightweight tags by default.
</p></div>
795 <h2 id=
"_options">OPTIONS
</h2>
796 <div class=
"sectionbody">
797 <div class=
"dlist"><dl>
806 Make an unsigned, annotated tag object
817 Make a GPG-signed tag, using the default e-mail address
’s key.
818 The default behavior of tag GPG-signing is controlled by
<code>tag.gpgSign
</code>
819 configuration variable if it exists, or disabled otherwise.
820 See
<a href=
"git-config.html">git-config(
1)
</a>.
828 Override
<code>tag.gpgSign
</code> configuration variable that is
829 set to force each and every tag to be signed.
836 --local-user=
<key-id
>
840 Make a GPG-signed tag, using the given key.
851 Replace an existing tag with the given name (instead of failing)
862 Delete existing tags with the given names.
873 Verify the GPG signature of the given tag names.
881 <num
> specifies how many lines from the annotation, if any,
882 are printed when using -l. Implies
<code>--list
</code>.
884 <div class=
"paragraph"><p>The default is not to print any annotation lines.
885 If no number is given to
<code>-n
</code>, only the first line is printed.
886 If the tag is not annotated, the commit message is displayed instead.
</p></div>
896 List tags. With optional
<code><pattern
>...
</code>, e.g.
<code>git tag --list
897 'v-*'
</code>, list only the tags that match the pattern(s).
899 <div class=
"paragraph"><p>Running
"git tag" without arguments also lists all tags. The pattern
900 is a shell wildcard (i.e., matched using fnmatch(
3)). Multiple
901 patterns may be given; if any of them matches, the tag is shown.
</p></div>
902 <div class=
"paragraph"><p>This option is implicitly supplied if any other list-like option such
903 as
<code>--contains
</code> is provided. See the documentation for each of those
904 options for details.
</p></div>
911 Sort based on the key given. Prefix
<code>-
</code> to sort in
912 descending order of the value. You may use the --sort=
<key
> option
913 multiple times, in which case the last key becomes the primary
914 key. Also supports
"version:refname" or
"v:refname" (tag
915 names are treated as versions). The
"version:refname" sort
916 order can also be affected by the
"versionsort.suffix"
917 configuration variable.
918 The keys supported are the same as those in
<code>git for-each-ref
</code>.
919 Sort order defaults to the value configured for the
<code>tag.sort
</code>
920 variable if it exists, or lexicographic order otherwise. See
921 <a href=
"git-config.html">git-config(
1)
</a>.
925 --color[=
<when
>]
929 Respect any colors specified in the
<code>--format
</code> option. The
930 <code><when
></code> field must be one of
<code>always
</code>,
<code>never
</code>, or
<code>auto
</code> (if
931 <code><when
></code> is absent, behave as if
<code>always
</code> was given).
942 Sorting and filtering tags are case insensitive.
950 Do not print a newline after formatted refs where the format expands
955 --column[=
<options
>]
962 Display tag listing in columns. See configuration variable
963 <code>column.tag
</code> for option syntax.
<code>--column
</code> and
<code>--no-column
</code>
964 without options are equivalent to
<em>always
</em> and
<em>never
</em> respectively.
966 <div class=
"paragraph"><p>This option is only applicable when listing tags without annotation lines.
</p></div>
969 --contains [
<commit
>]
973 Only list tags which contain the specified commit (HEAD if not
974 specified). Implies
<code>--list
</code>.
978 --no-contains [
<commit
>]
982 Only list tags which don
’t contain the specified commit (HEAD if
983 not specified). Implies
<code>--list
</code>.
987 --merged [
<commit
>]
991 Only list tags whose commits are reachable from the specified
992 commit (
<code>HEAD
</code> if not specified).
996 --no-merged [
<commit
>]
1000 Only list tags whose commits are not reachable from the specified
1001 commit (
<code>HEAD
</code> if not specified).
1004 <dt class=
"hdlist1">
1005 --points-at
<object
>
1009 Only list tags of the given object (HEAD if not
1010 specified). Implies
<code>--list
</code>.
1013 <dt class=
"hdlist1">
1016 <dt class=
"hdlist1">
1017 --message=
<msg
>
1021 Use the given tag message (instead of prompting).
1022 If multiple
<code>-m
</code> options are given, their values are
1023 concatenated as separate paragraphs.
1024 Implies
<code>-a
</code> if none of
<code>-a
</code>,
<code>-s
</code>, or
<code>-u
<key-id
></code>
1028 <dt class=
"hdlist1">
1031 <dt class=
"hdlist1">
1036 Take the tag message from the given file. Use
<em>-
</em> to
1037 read the message from the standard input.
1038 Implies
<code>-a
</code> if none of
<code>-a
</code>,
<code>-s
</code>, or
<code>-u
<key-id
></code>
1042 <dt class=
"hdlist1">
1045 <dt class=
"hdlist1">
1050 The message taken from file with
<code>-F
</code> and command line with
1051 <code>-m
</code> are usually used as the tag message unmodified.
1052 This option lets you further edit the message taken from these sources.
1055 <dt class=
"hdlist1">
1056 --cleanup=
<mode
>
1060 This option sets how the tag message is cleaned up.
1061 The
<em><mode
></em> can be one of
<em>verbatim
</em>,
<em>whitespace
</em> and
<em>strip
</em>. The
1062 <em>strip
</em> mode is default. The
<em>verbatim
</em> mode does not change message at
1063 all,
<em>whitespace
</em> removes just leading/trailing whitespace lines and
1064 <em>strip
</em> removes both whitespace and commentary.
1067 <dt class=
"hdlist1">
1072 Create a reflog for the tag. To globally enable reflogs for tags, see
1073 <code>core.logAllRefUpdates
</code> in
<a href=
"git-config.html">git-config(
1)
</a>.
1074 The negated form
<code>--no-create-reflog
</code> only overrides an earlier
1075 <code>--create-reflog
</code>, but currently does not negate the setting of
1076 <code>core.logAllRefUpdates
</code>.
1079 <dt class=
"hdlist1">
1080 --format=
<format
>
1084 A string that interpolates
<code>%(fieldname)
</code> from a tag ref being shown
1085 and the object it points at. The format is the same as
1086 that of
<a href=
"git-for-each-ref.html">git-for-each-ref(
1)
</a>. When unspecified,
1087 defaults to
<code>%(refname:strip=
2)
</code>.
1090 <dt class=
"hdlist1">
1095 The name of the tag to create, delete, or describe.
1096 The new tag name must pass all checks defined by
1097 <a href=
"git-check-ref-format.html">git-check-ref-format(
1)
</a>. Some of these checks
1098 may restrict the characters allowed in a tag name.
1101 <dt class=
"hdlist1">
1104 <dt class=
"hdlist1">
1109 The object that the new tag will refer to, usually a commit.
1117 <h2 id=
"_configuration">CONFIGURATION
</h2>
1118 <div class=
"sectionbody">
1119 <div class=
"paragraph"><p>By default,
<em>git tag
</em> in sign-with-default mode (-s) will use your
1120 committer identity (of the form
<code>Your Name
<your@email.address
></code>) to
1121 find a key. If you want to use a different default key, you can specify
1122 it in the repository configuration as follows:
</p></div>
1123 <div class=
"listingblock">
1124 <div class=
"content">
1126 signingKey =
<gpg-key_id
></code></pre>
1128 <div class=
"paragraph"><p><code>pager.tag
</code> is only respected when listing tags, i.e., when
<code>-l
</code> is
1129 used or implied. The default is to use a pager.
1130 See
<a href=
"git-config.html">git-config(
1)
</a>.
</p></div>
1134 <h2 id=
"_discussion">DISCUSSION
</h2>
1135 <div class=
"sectionbody">
1137 <h3 id=
"_on_re_tagging">On Re-tagging
</h3>
1138 <div class=
"paragraph"><p>What should you do when you tag a wrong commit and you would
1139 want to re-tag?
</p></div>
1140 <div class=
"paragraph"><p>If you never pushed anything out, just re-tag it. Use
"-f" to
1141 replace the old one. And you
’re done.
</p></div>
1142 <div class=
"paragraph"><p>But if you have pushed things out (or others could just read
1143 your repository directly), then others will have already seen
1144 the old tag. In that case you can do one of two things:
</p></div>
1145 <div class=
"olist arabic"><ol class=
"arabic">
1149 Just admit you screwed up, and use a different name. Others have
1150 already seen one tag-name, and if you keep the same name, you
1151 may be in the situation that two people both have
"version X",
1152 but they actually have
<em>different
</em> "X"'s. So just call it
"X.1"
1153 and be done with it.
1159 You really want to call the new version
"X" too,
<em>even though
</em>
1160 others have already seen the old one. So just use
<em>git tag -f
</em>
1161 again, as if you hadn
’t already published the old one.
1165 <div class=
"paragraph"><p>However, Git does
<strong>not
</strong> (and it should not) change tags behind
1166 users back. So if somebody already got the old tag, doing a
1167 <em>git pull
</em> on your tree shouldn
’t just make them overwrite the old
1169 <div class=
"paragraph"><p>If somebody got a release tag from you, you cannot just change
1170 the tag for them by updating your own one. This is a big
1171 security issue, in that people MUST be able to trust their
1172 tag-names. If you really want to do the insane thing, you need
1173 to just fess up to it, and tell people that you messed up. You
1174 can do that by making a very public announcement saying:
</p></div>
1175 <div class=
"listingblock">
1176 <div class=
"content">
1177 <pre><code>Ok, I messed up, and I pushed out an earlier version tagged as X. I
1178 then fixed something, and retagged the *fixed* tree as X again.
1180 If you got the wrong tag, and want the new one, please delete
1181 the old one and fetch the new one by doing:
1184 git fetch origin tag X
1186 to get my updated tag.
1188 You can test which tag you have by doing
1192 which should return
0123456789abcdef.. if you have the new version.
1194 Sorry for the inconvenience.
</code></pre>
1196 <div class=
"paragraph"><p>Does this seem a bit complicated? It
<strong>should
</strong> be. There is no
1197 way that it would be correct to just
"fix" it automatically.
1198 People need to know that their tags might have been changed.
</p></div>
1201 <h3 id=
"_on_automatic_following">On Automatic following
</h3>
1202 <div class=
"paragraph"><p>If you are following somebody else
’s tree, you are most likely
1203 using remote-tracking branches (eg.
<code>refs/remotes/origin/master
</code>).
1204 You usually want the tags from the other end.
</p></div>
1205 <div class=
"paragraph"><p>On the other hand, if you are fetching because you would want a
1206 one-shot merge from somebody else, you typically do not want to
1207 get tags from there. This happens more often for people near
1208 the toplevel but not limited to them. Mere mortals when pulling
1209 from each other do not necessarily want to automatically get
1210 private anchor point tags from the other person.
</p></div>
1211 <div class=
"paragraph"><p>Often,
"please pull" messages on the mailing list just provide
1212 two pieces of information: a repo URL and a branch name; this
1213 is designed to be easily cut
&pasted at the end of a
<em>git fetch
</em>
1214 command line:
</p></div>
1215 <div class=
"listingblock">
1216 <div class=
"content">
1217 <pre><code>Linus, please pull from
1219 git://git..../proj.git master
1221 to get the following updates...
</code></pre>
1223 <div class=
"paragraph"><p>becomes:
</p></div>
1224 <div class=
"listingblock">
1225 <div class=
"content">
1226 <pre><code>$ git pull git://git..../proj.git master
</code></pre>
1228 <div class=
"paragraph"><p>In such a case, you do not want to automatically follow the other
1229 person
’s tags.
</p></div>
1230 <div class=
"paragraph"><p>One important aspect of Git is its distributed nature, which
1231 largely means there is no inherent
"upstream" or
1232 "downstream" in the system. On the face of it, the above
1233 example might seem to indicate that the tag namespace is owned
1234 by the upper echelon of people and that tags only flow downwards, but
1235 that is not the case. It only shows that the usage pattern
1236 determines who are interested in whose tags.
</p></div>
1237 <div class=
"paragraph"><p>A one-shot pull is a sign that a commit history is now crossing
1238 the boundary between one circle of people (e.g.
"people who are
1239 primarily interested in the networking part of the kernel") who may
1240 have their own set of tags (e.g.
"this is the third release
1241 candidate from the networking group to be proposed for general
1242 consumption with 2.6.21 release") to another circle of people
1243 (e.g.
"people who integrate various subsystem improvements").
1244 The latter are usually not interested in the detailed tags used
1245 internally in the former group (that is what
"internal" means).
1246 That is why it is desirable not to follow tags automatically in
1247 this case.
</p></div>
1248 <div class=
"paragraph"><p>It may well be that among networking people, they may want to
1249 exchange the tags internal to their group, but in that workflow
1250 they are most likely tracking each other
’s progress by
1251 having remote-tracking branches. Again, the heuristic to automatically
1252 follow such tags is a good thing.
</p></div>
1255 <h3 id=
"_on_backdating_tags">On Backdating Tags
</h3>
1256 <div class=
"paragraph"><p>If you have imported some changes from another VCS and would like
1257 to add tags for major releases of your work, it is useful to be able
1258 to specify the date to embed inside of the tag object; such data in
1259 the tag object affects, for example, the ordering of tags in the
1260 gitweb interface.
</p></div>
1261 <div class=
"paragraph"><p>To set the date used in future tag objects, set the environment
1262 variable GIT_COMMITTER_DATE (see the later discussion of possible
1263 values; the most common form is
"YYYY-MM-DD HH:MM").
</p></div>
1264 <div class=
"paragraph"><p>For example:
</p></div>
1265 <div class=
"listingblock">
1266 <div class=
"content">
1267 <pre><code>$
GIT_COMMITTER_DATE=
"2006-10-02 10:31" git tag -s v1.0
.1</code></pre>
1273 <h2 id=
"_date_formats">DATE FORMATS
</h2>
1274 <div class=
"sectionbody">
1275 <div class=
"paragraph"><p>The
<code>GIT_AUTHOR_DATE
</code> and
<code>GIT_COMMITTER_DATE
</code> environment variables
1276 support the following date formats:
</p></div>
1277 <div class=
"dlist"><dl>
1278 <dt class=
"hdlist1">
1283 It is
<code><unix-timestamp
> <time-zone-offset
></code>, where
1284 <code><unix-timestamp
></code> is the number of seconds since the UNIX epoch.
1285 <code><time-zone-offset
></code> is a positive or negative offset from UTC.
1286 For example CET (which is
1 hour ahead of UTC) is
<code>+
0100</code>.
1289 <dt class=
"hdlist1">
1294 The standard email format as described by RFC
2822, for example
1295 <code>Thu,
07 Apr
2005 22:
13:
13 +
0200</code>.
1298 <dt class=
"hdlist1">
1303 Time and date specified by the ISO
8601 standard, for example
1304 <code>2005-
04-
07T22:
13:
13</code>. The parser accepts a space instead of the
1305 <code>T
</code> character as well. Fractional parts of a second will be ignored,
1306 for example
<code>2005-
04-
07T22:
13:
13.019</code> will be treated as
1307 <code>2005-
04-
07T22:
13:
13</code>.
1309 <div class=
"admonitionblock">
1312 <div class=
"title">Note
</div>
1314 <td class=
"content">In addition, the date part is accepted in the following formats:
1315 <code>YYYY.MM.DD
</code>,
<code>MM/DD/YYYY
</code> and
<code>DD.MM.YYYY
</code>.
</td>
1323 <h2 id=
"_files">FILES
</h2>
1324 <div class=
"sectionbody">
1325 <div class=
"dlist"><dl>
1326 <dt class=
"hdlist1">
1327 <code>$GIT_DIR/TAG_EDITMSG
</code>
1331 This file contains the message of an in-progress annotated
1332 tag. If
<code>git tag
</code> exits due to an error before creating an
1333 annotated tag then the tag message that has been provided by the
1334 user in an editor session will be available in this file, but
1335 may be overwritten by the next invocation of
<code>git tag
</code>.
1342 <h2 id=
"_notes">NOTES
</h2>
1343 <div class=
"sectionbody">
1344 <div class=
"paragraph"><p>When combining multiple
<code>--contains
</code> and
<code>--no-contains
</code> filters, only
1345 references that contain at least one of the
<code>--contains
</code> commits and
1346 contain none of the
<code>--no-contains
</code> commits are shown.
</p></div>
1347 <div class=
"paragraph"><p>When combining multiple
<code>--merged
</code> and
<code>--no-merged
</code> filters, only
1348 references that are reachable from at least one of the
<code>--merged
</code>
1349 commits and from none of the
<code>--no-merged
</code> commits are shown.
</p></div>
1353 <h2 id=
"_see_also">SEE ALSO
</h2>
1354 <div class=
"sectionbody">
1355 <div class=
"paragraph"><p><a href=
"git-check-ref-format.html">git-check-ref-format(
1)
</a>.
1356 <a href=
"git-config.html">git-config(
1)
</a>.
</p></div>
1360 <h2 id=
"_git">GIT
</h2>
1361 <div class=
"sectionbody">
1362 <div class=
"paragraph"><p>Part of the
<a href=
"git.html">git(
1)
</a> suite
</p></div>
1366 <div id=
"footnotes"><hr /></div>
1368 <div id=
"footer-text">
1370 2023-
06-
13 13:
57:
42 PDT