【发布时间】:2013-01-14 19:57:42
【问题描述】:
我目前正在使用具有多个分支的存储库。
当我创建一个标签时,那个标签是指当时的分支吗?
换句话说:每当我创建一个标签时,我是否需要切换到该分支内的所需分支和标签,以便标签在那个时间点引用该分支?
【问题讨论】:
我目前正在使用具有多个分支的存储库。
当我创建一个标签时,那个标签是指当时的分支吗?
换句话说:每当我创建一个标签时,我是否需要切换到该分支内的所需分支和标签,以便标签在那个时间点引用该分支?
【问题讨论】:
CharlesB's answer 和 helmbert's answer 都很有帮助,但我花了一段时间才理解它们。 这是另一种表达方式:
git show <tag> 来查看标签的详细信息不包含对任何分支的引用,只有标签指向的提交的ID。
6f6b5997506d48fc6267b0b60c3f0261b6afe7a2)git tag v0.1.0 # tags HEAD of *current* branchgit tag v0.1.0 develop # tags HEAD of 'develop' branchgit describe描述当前分支时:
git describe [--tags] 描述了当前分支自最近的 [可能是轻量级的] 标签以来的提交,在此分支的历史中。git describe 引用的标签可能无法反映最近创建的标签总体。【讨论】:
如果您通过例如创建标签
git tag v1.0
标签将引用您当前所在分支的最新提交。您可以更改分支并在那里创建标签。
你也可以在标记时只参考另一个分支,
git tag v1.0 name_of_other_branch
这将为另一个分支的最新提交创建标签。
或者你可以把标签放在任何地方,不管是哪个分支,直接引用某个提交的SHA1
git tag v1.0 <sha1>
【讨论】:
标签和分支完全不相关,因为标签指的是特定的提交,而分支是对历史最后一次提交的移动引用。树枝走了,标签留下了。
所以当你标记一个提交时,git 并不关心签出哪个提交或分支,如果你向他提供你想要标记的 SHA1。
我什至可以通过引用分支来标记(然后它会标记分支的尖端),然后说分支的尖端在其他地方(例如git reset --hard),或者删除分支。但是我创建的标签不会移动。
【讨论】:
当只调用 git tag <TAGNAME> 而没有任何附加参数时,Git 将从您当前的 HEAD(即当前分支的 HEAD)创建一个新标签。当向这个分支添加额外的提交时,分支 HEAD 会跟上那些新的提交,而标签总是指向同一个提交。
调用git tag <TAGNAME> <COMMIT> 时,您甚至可以指定使用哪个提交来创建标签。
无论如何,标签仍然只是指向某个提交(而不是分支)的“指针”。
【讨论】:
我们可以为过去的提交创建一个标签:
git tag [tag_name] [reference_of_commit]
例如:
git tag v1.0 5fcdb03
【讨论】:
如果你想标记你所在的分支,那么输入:
git tag <tag>
并使用以下命令推送分支:
git push origin --tags
【讨论】:
如果你想从一个类似于release/yourbranch 等的分支创建一个标签
那么你应该使用类似的东西
git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch
创建正确的标签后,如果您希望将标签推送到远程,请使用命令
git push origin YOUR_TAG_VERSION_OR_NAME
【讨论】: