Git标签只适用于当前分支吗?

时间:2013-01-30 20:52:01

标签: git git-tag

我目前正在使用具有多个分支的存储库。

当我创建标签时,该标签是否指向当时的分支?

换句话说:每当我创建一个标签时,我是否需要切换到该分支内的所需分支和标签,以便标签在该时间点引用该分支?

7 个答案:

答案 0 :(得分:139)

CharlesB's answerhelmbert's answer都很有帮助,但我花了一些时间来理解它们。 这是另一种方式:

  • 标记指向提交的指针提交独立于分支
    • 了解标记与分支没有直接关系非常重要 - 只识别提交
      • 可以从任意数量的分支指向该提交 - 即,它可以是任意数量分支的历史记录的一部分 - 包括无分支。
    • 因此,运行git show <tag>以查看标记的详细信息不包含对任何分支的引用,只包含标记指向的提交的ID。
      • (提交ID(a.k.a.对象名称或SHA-1 ID)是由十六进制数字组成的40个字符的字符串,这些数字是提交内容的哈希值;例如:6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
  • 分支仅在间接 中发挥作用:
    • 创建标记时, 暗示标记将指向的提交
      • 未指定标记的目标默认为当前分支的最新提交(a.k.a.HEAD);例如。:
        • git tag v0.1.0 # tags HEAD of *current* branch
      • 指定分支名称作为标记目标默认为该分支的最新提交;例如。:
        • git tag v0.1.0 develop # tags HEAD of 'develop' branch
      • (正如其他人所说,您也可以明确指定提交ID作为标记的目标。)
    • 使用git describe描述当前分支时:
      • git describe [--tags]描述了自此分支历史记录中最新[可能轻量级]标记以来提交的当前分支
      • 因此, git describe引用的标记可能无法反映最近创建的标记整体

答案 1 :(得分:115)

如果您通过例如

创建标记
git tag v1.0

标记将引用您当前所在分支的最新提交。您可以更改分支并在那里创建标记。

您也可以在标记时引用其他分支,

git tag v1.0 name_of_other_branch

将为另一个分支的最新提交创建标记。

或者您可以通过直接引用某些提交的SHA1将标记放在任何地方,无论哪个分支

git tag v1.0 <sha1>

答案 2 :(得分:30)

标签和分支完全不相关,因为标签引用特定的提交,而分支是对最后一次提交历史记录的移动引用。分店去,标签留。

因此,当您标记提交时,如果您向他提供要标记的SHA1,则git不关心检出哪个提交或分支。

我甚至可以通过引用分支进行标记(然后它将标记分支的尖端),然后说分支的提示位于其他地方(例如,使用git reset --hard),或者删除分支。我创建的标签不会移动。

答案 3 :(得分:5)

在没有任何其他参数的情况下调用git tag <TAGNAME>时,Git将从您当前的HEAD(即当前分支的HEAD)创建一个新标记。在向此分支添加其他提交时,分支HEAD将跟上这些新提交,而标记始终引用相同的提交。

调用git tag <TAGNAME> <COMMIT>时,您甚至可以指定用于创建标记的提交。

无论如何,标签仍然只是某个提交(不是分支)的“指针”。

答案 4 :(得分:3)

我们可以为过去的提交创建一个标记:

git tag [tag_name] [reference_of_commit]

例如:

git tag v1.0 5fcdb03

答案 5 :(得分:2)

如果要标记您所在的分支,请键入:

git tag <tag>

并通过以下方式推动分支:

git push origin --tags

答案 6 :(得分:0)

如果您要从分支创建标签,例如release/yourbranch等 然后您应该使用类似的

git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch

在创建了正确的标签后,如果您希望将标签推送到远程,则使用命令

git push origin YOUR_TAG_VERSION_OR_NAME