在Arch Linux包装中,我遇到了git提示(What is a branch tip in Git?)这个词。作为一个git用户,我习惯于调用HEAD,我认为它是相同的或者至少是类似的概念。HEAD和git中的提示之间有什么关系?
这两者之间的关系是什么?为什么同一件事情有两个名字(假设他们是这样),并且是否存在一个名称更合适的情况?
在Arch Linux包装中,我遇到了git提示(What is a branch tip in Git?)这个词。作为一个git用户,我习惯于调用HEAD,我认为它是相同的或者至少是类似的概念。HEAD和git中的提示之间有什么关系?
这两者之间的关系是什么?为什么同一件事情有两个名字(假设他们是这样),并且是否存在一个名称更合适的情况?
HEAD
是git中的一个特殊术语。它指的是最近在现在的和在你现在坐的图的位置。
如果你在一个分支,并在其提示,然后分支小费也被称为HEAD
。
如果您检出另一个分支,那么该分支的提示将变为HEAD
。
如果您签出一个随机提交,它根本不是分支提示,例如,
git checkout HEAD~3
(其作为可能不会将你置于一个分离的头状态),则该承诺被称为HEAD
,虽然它不一定与任何一间分行的小费排队。
这是密切相关的GIT中模型本身的一个问题:所有的提交(连同初始提交的除外)具有至少一个亲本:
+--- G
+
A +- B +- C +- D +- H
+ +
+----|--- E
|
+--- F
这意味着所有的提交可以被视为有向非循环图的节点,其中初始提交是根;这个有向无环图的叶子是分支尖端。
重新HEAD
,从git(1)
:
命名的指针叫裁判标志着在历史上有趣的观点。一个ref可以包含一个对象的名称或另一个名称的 SHA-1。名称以 开头的参考ref/head /包含正在开发的分支 的最近提交(或“头”)的SHA-1名称。感兴趣标签的SHA-1名称存储在ref/tags /下。 A 名为HEAD的特殊参考文件包含当前检出分支的名称。
这个描述并不适用于分离的HEAD场景(因为分支并没有真正的名字),但是如果你把这种情况想象成一个匿名分支,它仍然会很好地描述它。
总之,HEAD
是一个指向提交(在某种意义上说 - 它通常更准确的想HEAD
作为一个指针指向一个REF,这反过来又指向一个提交),而分支提示指一种特定类型的提交,那些没有后代的。