【发布时间】:2013-08-07 22:22:21
【问题描述】:
我被 git 标记弄湿了,但我之前的背景是在 Subversion 中,“标记”实际上只是副本,而不是“真正的”标记...
如果我在 git repo 中添加标签,它是应用于所有分支还是仅应用于当前分支?
例如,如果我目前有这些分支 (git branch -v):
* master deadbeef My master head comment
dev baddfeed My def head comment
如您所见,当前签出的分支是 master。现在假设我git tag -a TAGNAME,TAGNAME 是否只适用于deadbeef(主分支)或baddfeed(开发分支)?
例如,假设我随后在签出标签之前切换到 dev 分支(即,不是创建标签的分支):
git checkout dev
git checkout TAGNAME
然后我是否会结帐baddfeed 或者标记结帐(第二行)会将我切换回主分支(创建标记的位置)并给我结帐deadbeef?
(或者第三个选项,我对创建和恢复标签的理解是否过于有缺陷或过于简单,以至于答案不能像这两个选项之一那样简单?)
另外,如果我使用轻量级标签 (git tag TAGNAME) 而不是带注释的标签,我的问题的答案是否会改变?
【问题讨论】:
-
一个标签标识一个提交。见The Git Object Model。
-
Greg 的答案就是您所需要的。标签是没有上下文的单一提交,它们存在于存储库范围的命名空间中。您不会谈论给定标记“在”分支上,就像您谈论 Linux 3.11“在”任何分支上一样(显然它将存在于内核的 any 分支中!)。
标签: git branch git-branch git-tag