问题描述
git标签是否指向特定的sha1,特定分支上的特定提交或其他内容?
这个问题与What happen to Git tags pointing to a removed commit极为相似,但是我在那里找不到想要的答案。
让我们使用以下示例:
shutdown
我正试图帮助自己回答以下问题:
-
如果我在剪切了Branch后标记了在Branch上的commit C,我的标记是否同时适用于Main和/或Branch?
-
如果提交历史不同,会发生什么?例如,是否发生以下变化:
C (Branch,cut with same commit history) | A-----B-----C (Main)
编辑:看起来#4是不可能的,因为如果父对象不同,则提交不能具有相同的哈希值
解决方法
普通标签只是特定Git对象的名称,通常是一个提交,但可以是树,blob或任何其他带有哈希的对象。
带注释的标签本身就是一个不同的对象,其中包含对另一个对象的引用。
关于您的问题:
-
它适用于C。
Main
和Branch
当前只是同一提交的另外两个名称。但是,提交到任何一个分支都不会影响标记将引用的内容。它将保留为提交C的名称。 -
都不是。该标签指的是C,不是任何分支头也可能指的是C。
-
都不是。指的是C。
-
分支历史实际上没有意义。您的两个C与您的两个E是不同的提交。标签将恰好指向两个E中的一个。
简而言之:标签通常独立于分支。
,分支是提交指针。标签也指向提交。如果将提交合并到另一个分支,则不会改变。
,分支是指向提交的指针。
标签也是指向提交的指针,与分支无关。
区别在于,标记是不可变的,它始终指向同一提交。当执行命令git reset
或git commit