我目前正在处理一个有多个分支的代码库。
当我创建一个标签时,该标签是否指向当前分支?
换句话说:每当我创建一个标签时,我是否需要切换到所需的分支并在该分支内打标签,以便标签在那一时间点对应该分支?
CharlesB的回答和helmbert的回答都很有帮助,但我花了一段时间才理解它们。
git show <tag>
以查看标签的详细信息不包含任何分支的引用,只包含标签指向的提交的ID。
6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
)git tag v0.1.0 # 标记*当前*分支的HEAD
git tag v0.1.0 develop # 标记 'develop' 分支的 HEAD
git describe
描述当前分支时:
git describe [--tags]
根据本分支历史中最近的[可能是轻量级的]标记之后的提交来描述当前分支。git describe
引用的标记可能不反映最近创建的标记。如果您通过例如
git tag v1.0
该标签将引用当前所在分支的最新提交。您可以切换分支并在那里创建标签。
您也可以在标记时直接引用其他分支。
git tag v1.0 name_of_other_branch
它将创建标记到另一个分支的最新提交。
或者,您可以通过直接引用某个提交的SHA1,在任何分支中放置标记。
git tag v1.0 <sha1>
标签(tags)和分支(branch)是完全无关的,因为标签指向一个特定的提交(commit),而分支是对历史记录中最后一次提交的移动引用。分支会变化,而标签会保留。
所以当你对一个提交(commit)打标签(tags)时,如果你提供了你想打标签的 SHA1 ,Git 就不在意哪个提交(commit)或分支(branch)被检出。
我甚至可以通过引用一个分支来打标签(tags)(它将打在该分支的最新提交上),稍后再说该分支的顶部位置在其他地方(例如,使用 git reset --hard
),或者删除该分支。然而,我创建的标签(tags)不会移动。
在不添加任何额外参数的情况下,只需调用git tag <TAGNAME>
,Git 就会从您当前的 HEAD(即当前分支的 HEAD)创建一个新标签。 当向该分支添加其他提交时,分支 HEAD 将跟随这些新提交,而标签始终指向同一次提交。
当调用git tag <TAGNAME> <COMMIT>
时,您甚至可以指定要用于创建标签的提交。
无论如何,标签仍然只是对某个提交的“指针”(而不是分支)。
git tag [tag_name] [reference_of_commit]
eg:
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