在git中像`HEAD~1`这样的指针名称是什么?

时间:2018-04-06 01:03:25

标签: git

我知道HEAD~1代表提交HEAD的父级,HEAD^2代表提交HEAD的第二个父级。

来自git reflogHEAD@{n}gitrevision

HEAD~nHEAD^nHEAD~3^2master~1cb2510e~1等指针是否有特殊名称?它们是否以与分支指向特定提交相同的方式引用?它被称为相对参考吗?

我一直在努力寻找,但没有成功。任何人都能解释一下吗?

4 个答案:

答案 0 :(得分:1)

我会说所有这些都是“git revisions”(或gitrevisions作为一个单词)。请注意,所有这些都列在the gitrevisions documentation

不幸的是,这个术语似乎也包含范围符号,例如origin/master..master。出于讨论的目的,我们喜欢有一个特定于这种表达式的两半的术语,以便构造一个正式的语法。 Git没有定义一个,所以你必须创建自己的。最接近的似乎是短语扩展SHA-1语法,如jsageryd noted。这是一个特别糟糕的术语:尽管它很笨拙,但它太具体了,因为长期努力将Git从SHA-1转移到其他哈希算法。

在内部,在Git的源代码中,可以将这些内容重命名为OID,代表 O 对象 ID entifier。 OID似乎是最合适的术语。但是,在内部,这是完全解决的问题,目前是160位SHA-1,最终会更大。也许扩展OID ? : - )

答案 1 :(得分:0)

man gitrevisions和Git项目的提交消息中使用的术语是“扩展SHA-1语法”。

虽然,我倾向于认为它的用法大部分仅限于关于Git内部的技术讨论。我可能错了。

答案 2 :(得分:0)

我看到的用于他们的名字是“revspec”,它与“refspec”很好地配对,用于描述fetch和push应如何在不同的存储库中映射refnames的配对。我不记得我在哪里看过它,我不记得曾经使用过它,源代码上的一个git grep说它只发生在接收后的样本钩子里,googling说别人确实使用它。

答案 3 :(得分:0)

我试图找出有关扩展的SHA-1 语法的信息---但这似乎是一件麻烦事。也许这甚至带有一点幽默感:“规范”名称将是(缩写)SHA-1名称。但是出于实际原因,您具有HEAD(和@)以及这种扩展的语法(有点神秘)。

“指定版本”是gitrevisions中的大标题。

修订参数<rev> 通常(但不一定)命名为 提交对象。它使用所谓的扩展SHA-1语法。这里 对象名称的多种拼写方式。即将结束的那些 列表中包含提交中的树和斑点。

因此HEAD~1将是(一个拼写方式)提交对象的名称,该提交对象的(真实)名称是“ 7ah25e ...”。