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

我目前正在使用一个有多个分支的仓库。

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

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

如果你通过例如创build一个标签

git tag v1.0 

该标记将引用您当前所在分支的最近提交。 你可以改变分支并在那里创build一个标签。

您也可以在标记时参考其他分支,

 git tag v1.0 name_of_other_branch 

这将创build标签到另一个分支的最近提交。

或者你可以把标签放在任何地方,不pipe是哪个分支,直接引用某个提交的SHA1

 git tag v1.0 <sha1> 

CharlesB的答案和Helmbert的答案都是有帮助的,但是花了我一些时间去了解它们。 这是另一种方式:

  • 标签指向提交指针 ,并且提交独立于分支而存在
    • 理解标签与分支没有直接关系很重要 – 他们只能识别一个提交
      • 这种承诺可以指向任何数量的分支 – 也就是说,它可以是任何分支的历史的一部分 – 包括没有。
    • 因此,运行git show <tag>查看标签的详细信息不包含任何分支的引用,只有标签指向的提交ID。
      • (提交ID(也称为对象名称或SHA-1 ID)是由hex数字组成的40个字符的string,这些数字是提交内容的散列;例如: 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
  • 分支机构间接起作用
    • 创build标签时 ,通过暗示标签将指向的提交
      • 不指定标签的目标,默认为当前分支的最近提交(又名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引用的标签可能并不反映最近创build的标签整体

标签和分支是完全不相关的,因为标签引用了特定的提交,而分支是对历史上次提交的移动引用。 分支去,标签停留。

所以,当你提交一个提交时,如果你提供了你想要标记的SHA1,那么git并不关心哪个提交或分支被检出。

我甚至可以通过引用一个分支来标记(然后标记分支的末端),然后说分支的提示是在其他地方(例如git reset --hard ),或者删除分支。 我创build的标签不会移动。

当只调用git tag <TAGNAME>而没有任何附加参数时,Git会从当前的HEAD(即当前分支的HEAD)创build一个新标签。 当向这个分支添加额外的提交时,分支HEAD将跟上这些新的提交,而标记总是指向相同的提交。

当调用git tag <TAGNAME> <COMMIT> ,甚至可以指定用于创build标签的提交。

无论如何,标签仍然只是一个“指针”,而不是一个分支。

我们可以为过去的一些提交创build一个标签:

提交的git标签tag_name引用

例如:git tag v1.0 5fcdb03