detached HEAD意义详解

概述:在使用git的过程中,我们常常会对其中的HEAD感到疑惑:HEAD是什么意思?表示当前分支吗?什么是处于游离态的commit点?等等,这些都和一个叫做detached head的状态有关,我们来看看它的真面目。
    
        通常情况下,HEAD指向一个分支;同时,每一个分支对应一个特定的commit(确切的说,一个分支上可以有多个commit,但是只有一个顶层commit,而且commit之间是简单的线性关系)。我们来看下面这个包含三个commit的例子,其中目前在master分支上。
                      HEAD (refers to branch 'master')
                        |
                       v
           a---b---c  branch 'master' (refers to commit 'c')
                 ^
                  |
             tag 'v2.0' (refers to commit 'b')

在这样的状况下,如果进行一次提交,当前分支将指向新的提交点。具体来说,git commit创建了一个新的commit id,它的父节点是的commit的id是C。这个时候,HEAD仍然指向master分支,而且指向commit id是d的提交点。
       
    $ edit; git add; git commit

HEAD (refers to branch 'master')
                             |
                             v
           a---b---c---d  branch 'master' (refers to commit 'd')
                ^
                |
             tag 'v2.0' (refers to commit 'b')

有时,如果能够检出到一个不在分支顶端的commit点是很有用的(通常情况下,我们直接运行命令git checkout mater,这样checkout到master的最新commit上);同样,如果能够创建一个不属于任何分支的提交点也是一件很有用的事情。运行接下来的两条命令,看看会发生什么。
       
    $ git checkout v2.0  # or
    $ git checkout master^^

HEAD (refers to commit 'b')
               |
               v
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')

注意,现在head已经指向commit b,这就是所谓的dedatched head状态。从这里我们也可以看出,head是当前index的状态,而不是当前分支(的最近commit节点)。这仅仅意味着head指向某个特定的commit点,而不是指向每一个特定的分支(的顶端节点)。如果我们此时提交一个commit,看看将要发生什么:

 $ edit; git add; git commit

HEAD (refers to commit 'e')
                 |
                 v
                 e
                /
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')
    注意,此时产生了一个新的提交点,但是它只能被head索引到,不属于任何一个分支。当然,我们还可以给在这个“无名分支”的基础上继续提交。
          
 $ edit; git add; git commit

HEAD (refers to commit 'f')
                      |
                      v
                 e---f
                /
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')
     实际上,我们可以进行任何git的常规操作。但是,让我们开看看如果我们运行git checkout master将会发生什么:

$ git checkout master

HEAD (refers to branch 'master')
                 e---f     |
                /           v
           a---b---c---d  branch 'master' (refers to commit 'd')
               ^
               |
             tag 'v2.0' (refers to commit 'b')
 此时,我们一定要注意,e f已经处于无法被索引到的状态。最终e和f将被git的默认回收机制所回收,除非我们在它们被回收之前创建一个指向他们的索引。如果我们没有从commit f离开的话,可以用接下来的命令创建一个指向f的索引。        
   
$ git checkout -b foo   (1)
$ git branch foo        (2)
$ git tag foo           (3)

1.创建来一个foo分支,指向f,接着更新head指向分支foo,此时,我们不再处在detached head的状态
2.同样创建了一个foo分支,但是head仍然指向master分支,仍然处在detached head的状态。
3.创建了一个新标签foo,仍处于detached的状态。
        如果我们从f处离开,我们必须首先恢复他的主体名称,接着我们才可以创建指向它的索引。例如,为了看看最近的两个由head指向的commit点,我们可以使用如下的命令:   
        
$ git reflog -2 HEAD # or

$ git log -g -2 HEAD

(0)

相关推荐

  • 【Git基本命令】

    [基本指令] git init :使目标文件夹变成一个仓库 git add <文件名,含后缀> : 告诉git我要添加文件了 git commit -m "<提交说明> ...

  • 学会这 11 条,你离 Git 大神就不远了!

    仅做学术分享,如有侵权,联系删除 转载于 :作者: Escape 链接: https://www.escapelife.site/posts/f6ffe82b.html Git Flow 主干分支 稳 ...

  • Git之HEAD和origin

    Git之HEAD和origin

  • 【效率】超详细!手把手带你快速入门 GitHub!

    作者:Peter     编辑:JackTian 来源:公众号「杰哥的IT之旅」 快速入门GitHub GitHub在程序开发领域家喻户晓,现在几乎整个互联网的开发者都将版本管理工具GitHub作为版 ...

  • 十神论命口诀,十神在四柱干支的意义详解

    "快跑者未必能赢,力战者未必能胜,智慧者未必得粮食,明智者未必得财富,灵巧者未必得喜悦,他们所得的只是时间和机遇."接下来,来八卦命理看看十神论命口诀,十神在四柱干支的意义详解? ...

  • 八字神煞文昌是什么意思?文昌在四柱的不同意义详解

    八字神煞有哪些?八字神煞文昌是什么意思?文昌是神煞中较为常见的吉星之一.八字命局中有文昌之人,往往头脑机灵,从聪明伶俐,充满智慧,情商高,为人处世较为出色,智商高,学习东西比较快,才华横溢,容易年少成 ...

  • 八字中正财偏财意义详解

    木易奇门预测:八字中正财偏财意义详解 木易奇门预测 木易奇门预测 2020-11-25 一.正财代表房产.田园.资产.财物.又代表妻子.妻缘.财运.薪俸及其它为我支配使用的人或物. 1:正财人的正面性 ...

  • 八字神煞空亡解析详解,在四柱的意义解析

    八字神煞包括有哪些?八字神煞空亡解析内容如何?八字神煞中有神和煞,神表示吉,而煞表示凶.神煞当中有天赦.金匮.铁扫.外桃花.内桃花.正桃花等等.空亡是八字神煞之一,其原名是叫做旬空,空的意思就是无,没 ...

  • 食神在八字命理中代表什么?详解食神的意义

    食神是十神关系中的一种,食神又名的爵星或寿星,同时也是智慧之星,我生者,是同性相生的关系. 食神虽偏,但是吉利.食神是父母所生的子女,代表人的衣禄,吃.穿.住主方的星宿.晚年有食神,无疑是很好的.它含 ...

  • 详解白沙瓦之战经过 白沙瓦之战意义

    在公元10世纪左右,在中亚地区的腹地,已经大面积的突厥化,突厥化的浪潮已经无法逆转.各处来源不同的族群纷纷都出于自己的原因归属到了新的阵营门下,并且加入到了穆斯林信仰伊斯兰教的大家庭当中.这些人也立刻 ...

  • 详解《八字十神》在年柱、月柱、日柱、时柱的意义

    正财在年柱.月柱.日柱.时柱的意义 正财现于年柱者 身强而年干现正财为喜不遭破坏者,大都出身于富贵之家,早年能确立经济基础,能得父祖之财力相助.而且较能得到富家之女为妻.年月两干均现正财,或者年干是正 ...

  • 详解八字十神在年柱、月柱、日柱、时柱的意义

    详解八字十神在年柱.月柱.日柱.时柱的意义 正财在年柱.月柱.日柱.时柱的意义 正财现于年柱者 身强而年干现正财为喜不遭破坏者,大都出身于富贵之家,早年能确立经济基础,能得父祖之财力相助.而且较能得到 ...

  • 正印在八字命理中代表什么?详解正印的意义

    正印在八字命理中是十神关系的一种,生我者为印枭,异性相生为正印,同性相生为偏印. 通常我们在预测八字时,要想测人的智力.母亲.姥姥.姥爷等亲人的相关信息,或者文凭.文书.车.心地善恶等信息,都可以通过 ...