zoukankan      html  css  js  c++  java
  • Git 中 HEAD、工作树和索引之间的区别

    一、HEAD

    git中,可以存在很多分支,其本质上是一个指向commit对象的可变指针,而Head是一个特别的指针,是一个指向你正在工作中的本地分支的指针

    简单来讲,就是你现在在哪儿,HEAD 就指向哪儿

    例如当前我们处于master分支,所以HEAD这个指针指向了master分支指

     然后通过调用git checkout test切换到test分支,那么HEAD则指向test分支,如下图:

     但我们在test分支再一次commit信息的时候,HEAD指针仍然指向了test分支指针,而test分支指针已经指向了最新创建的提交,如下图:

     这个HEAD存储的位置就在.git/HEAD目录中,查看信息可以看到HEAD指向了另一个文件

    $ cat .git/HEAD
    ref: refs/heads/master
    
    $ cat .git/refs/heads/master
    7406a10efcc169bbab17827aeda189aa20376f7f

    这个文件的内容是一串哈希码,而这个哈希码正是master分支上最新的提交所对应的哈希码

    所以,当我们切换分支的时候,HEAD指针通常指向我们所在的分支,当我们在某个分支上创建新的提交时,分支指针总是会指向当前分支的最新提交

    所以,HEAD指针 ——–> 分支指针 ——–> 最新提交

    二、工作树和索引

    Git管理下,大家实际操作的目录被称为工作树,也就是工作区域

    在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域,也被称为暂存区域

     

    Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库

    因此,要提交文件,首先需要把文件加入到索引区域中。

    所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交

    三、区别

    从所在的位置来看:

    • HEAD 指针通常指向我们所在的分支,当我们在某个分支上创建新的提交时,分支指针总是会指向当前分支的最新提交

    • 工作树是查看和编辑的(源)文件的实际内容

    • 索引是放置你想要提交给 git仓库文件的地方,如工作树的代码通过 git add 则添加到 git 索引中,通过git commit 则将索引区域的文件提交到 git 仓库中

    本文来自博客园,作者:喆星高照,转载请注明原文链接:https://www.cnblogs.com/houxianzhou/p/15134838.html

  • 相关阅读:
    Python【每日一问】38
    Python【每日一问】37
    Shell~echo -e 颜色输出
    Python【每日一问】36
    Python【每日一问】35
    聊聊、Java 命令 第二篇
    聊聊、RabbitMQ 配置文件
    聊聊、Java 命令 第一篇
    聊聊、CA机构认证CSR生成
    聊聊、Tomcat中文乱码和JVM设置
  • 原文地址:https://www.cnblogs.com/houxianzhou/p/15134838.html
Copyright © 2011-2022 走看看