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

Ger*_*rdo 129 git git-tag

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

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

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

mkl*_*nt0 162

CharlesB的回答helmbert的答案都很有帮助,但我花了一些时间来理解它们.这是另一种方式:

  • 标签是一个指针,指向一个提交,并提交独立存在的分支.
    • 重要的是要理解标签与分支没有直接关系 - 它们只识别提交.
      • 可以从任意数量的分支指向该提交 - 即,它可以是任何数量的分支的历史的一部分 - 包括无分支.
    • 因此,运行git show <tag>以查看标记的详细信息不包含对任何分支的引用,只包含标记指向的提交的ID.
      • (提交的ID(又名对象名或SHA-1的ID)的40个字符的字符串构成的十六进制中超过的内容散列位的提交;例如:. 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2)
  • 分支机构只是间接发挥作用:
    • 创建标记时,通过暗示标记将指向的提交:
      • 不指定标记的目标默认为当前分支的最新提交(也称为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可能无法反映最近创建的标签整体.

  • @HawkeyeParker:我不再沉浸于此,但您不需要知道分支,因为标记标识了特定的提交(可以是多个分支的一部分),您可以从那里进行调查. (2认同)

Kal*_*kki 128

如果您通过eg创建标记

git tag v1.0
Run Code Online (Sandbox Code Playgroud)

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

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

git tag v1.0 name_of_other_branch
Run Code Online (Sandbox Code Playgroud)

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

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

git tag v1.0 <sha1>
Run Code Online (Sandbox Code Playgroud)


Cha*_*esB 32

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

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

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

  • 换句话说,标签只是丑陋的git哈希的好名字.无论存在哪个分支(ed),标记(和哈希)都存在. (14认同)

hel*_*ert 6

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

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

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


小智 6

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

git tag [tag_name] [reference_of_commit]
Run Code Online (Sandbox Code Playgroud)

例如:

git tag v1.0 5fcdb03
Run Code Online (Sandbox Code Playgroud)