我目前正在使用具有多个分支的存储库。
当我创建标签时,该标签是否引用当时的分支?
换句话说:每当我创建一个标签时,我是否需要切换到该分支内的所需分支和标签,以便该标签在那个时间点引用该分支?
CharlesB 的回答和helmbert 的回答都很有帮助,但我花了一段时间才理解它们。这是另一种表达方式:
git show <tag>
查看标签的详细信息不包含对任何分支的引用,只有标签指向的提交的 ID。
6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
:)git tag v0.1.0 # tags HEAD of *current* branch
git tag v0.1.0 develop # tags HEAD of 'develop' branch
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>
标签和分支完全不相关,因为标签指的是特定的提交,而分支是对历史最后一次提交的移动引用。树枝走了,标签留下了。
因此,当您标记提交时,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
etc 的分支创建一个标签那么你应该使用类似的东西
git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch
创建正确的标签后,如果您希望将标签推送到远程,请使用命令
git push origin YOUR_TAG_VERSION_OR_NAME