在git中HEAD和tip之间的关系是什么?

时间:2017-02-14 21:03:00

标签: git terminology

在Arch Linux打包中,我遇到了术语git tip(What is a branch tip in Git?)。作为一个git用户,我习惯称之为HEAD我认为是相同或至少是一个类似的概念。

两者之间有什么关系?为什么同一个东西有两个名称(假设它们是)并且是否存在一个名称更合适的情况?

2 个答案:

答案 0 :(得分:6)

HEAD是git中的一个特殊术语。它指的是目前最近的提交 ,而位于您现在坐的图表中的位置

如果您在分支机构及其顶端,则分支提示也称为HEAD

如果您查看另一个分支,则该分支的提示将变为HEAD

如果你检查出一个根本不是分支提示的随机提交,例如

git checkout HEAD~3

(尽管不会让你进入一个独立头状态),然后该提交被称为HEAD,尽管它不一定与任何分支的提示对齐。

答案 1 :(得分:2)

这是一个与Git模型本身密切相关的问题:所有提交(初始提交除外)至少有一个父级:

               +--- G
               +
A +- B +- C +- D +- H
     +    +
     +----|--- E
          |
          +--- F

这意味着所有提交都可以被视为有向非循环图的节点,其中初始提交是根;这个有向无环图的叶子是分支尖端。

重新HEAD,来自git(1)

  

名为refs的命名指针标记历史中的有趣点。裁判可能包含   SHA-1对象的名称或另一个ref的名称。名称开头的参考号   ref / head /包含分支的最新提交(或“head”)的SHA-1名称   正在开发中。感兴趣的标签的SHA-1名称存储在ref / tags /下。一个   名为HEAD的特殊引用包含当前签出分支的名称。

这个描述在分离的HEAD场景中并不适用(因为分支实际上没有名称),但是如果你把这种情况看作匿名分支,它仍然可以很好地描述它。

简而言之,HEAD是指向提交的指针(从某种意义上说 - 将HEAD视为指向ref的指针通常更准确,而指针又指向提交),而分支提示是指特定类型的提交,即没有后代的提交。