有人能告诉我在Git中HEAD,工作树和索引之间的区别吗?

据我所知,它们都是不同分支的名称。 我的假设是否正确?


编辑

我找到了这个

单个git存储库可以跟踪任意数量的分支,但是您的工作树只与其中一个分支相关联(“当前”或“已检出”分支),HEAD指向该分支。

这是否意味着HEAD和工作树总是一样的?


#1楼

工作树

您的工作树是您当前正在处理的文件。

Git指数

  • git“index”是您将要提交的文件放置到git存储库的位置。

  • 索引也称为缓存目录缓存当前目录缓存暂存区域暂存文件

  • 在“提交”(签入)文件到git存储库之前,需要先将文件放在git“index”中。

  • 索引不是工作目录:您可以键入命令,例如git status ,git将告诉您工作目录中的哪些文件已添加到git索引(例如,使用git add filename命令)。

  • 索引不是git存储库:git索引中的文件是git将使用git commit命令提交给git存储库的文件。


#2楼

您的工作树就是您当前正在处理的文件中的实际内容。

HEAD是指向您上次检出的分支或提交的指针,如果您创建它,它将是新提交的父级。 例如,如果你在master分支上,那么HEAD将指向master ,当你提交时,新的提交将是master指向的修订的后代, master将被更新为指向新的提交。

索引是准备新提交的暂存区域。 本质上,索引的内容将进入新的提交(尽管如果你执行git commit -a ,这将自动将所有更改添加到Git在提交之前知道的文件,因此它将提交当前内容你的工作树) git add会将工作树中的文件添加或更新到索引中。


#3楼

HEAD (当前分支上的当前分支或最后提交状态), 索引 (也称为暂存区域)和工作树 (结帐中的文件状态)之间的区别在“1.3 Git Basics ” 的“三态”部分中描述Scott Chacon的Pro Git一书(Creative Commons行货)。

以下是本章的图片说明:

在上面的图像中,“工作目录”与“工作树”相同,“暂存区域”是git“index”的备用名称, HEAD指向当前签出的分支,该尖端指向上次提交的“ git目录(存储库)“

请注意, git commit -a将在一个步骤中进行更改和提交。


#4楼

关于这些主题的一些其他好的参考:

  • 我的Git工作流程

我使用索引作为检查点

当我即将做出可能出错的改变时 - 当我想探索某个方向时,我不确定我是否可以继续,或者是否这是一个好主意,例如概念要求重构或更改表示类型 - 我检查我的工作到索引。 如果这是我自上次提交以来所做的第一次更改,那么我可以使用本地存储库作为检查点,但通常我有一个概念上的更改,我正在实现一组小步骤。 我希望在每个步骤之后检查点,但保存提交,直到我回到工作,测试代码。

笔记:

  1. 工作区是您查看和编辑的(源)文件的目录树。

  2. 索引<baseOfRepo>/.git/index index中的单个大型二进制文件,它列出了当前分支中的所有文件,它们的sha1校验和,时间戳和文件名 - 它不是另一个带有副本的目录。其中的文件。

  3. 本地存储库是一个隐藏目录( .git ),包括一个objects目录,其中包含repo中每个文件的所有版本(本地分支和远程分支的副本)作为压缩的“blob”文件。

不要将上图中表示的四个“磁盘”视为repo文件的单独副本。

  • 为什么Git比X好

  • Git是你的朋友而不是敌人Vol。 3:参考和索引

它们基本上是Git提交的命名参考。 有两种主要类型的参考:标签和头部。

  • 标签是标记历史中特定点的固定引用,例如v2.6.29。
  • 相反,总是移动头来反映项目开发的当前位置。

(注意:由Timo Huovinen 评论 ,这些箭头不是提交指向的,它是工作流程顺序 ,基本上显示箭头为1 -> 2 -> 3 -> 4其中1是第一次提交, 4是最后一次)

现在我们知道项目中发生了什么。
但要知道这里发生了什么,现在有一个特殊的参考叫做HEAD。 它有两个主要目的:

  • 它告诉Git哪个提交从结账时拿走文件,然后
  • 它会告诉Git在提交时将新提交放在哪里。

当你运行git checkout ref它会将HEAD指向你指定的引用并从中提取文件。 当您运行git commit它会创建一个新的提交对象,该对象将成为当前HEAD的子对象。 通常HEAD指向其中一个头部,所以一切正常。

在Git中,HEAD,工作树和索引之间有什么区别?相关推荐

  1. java jar包和war包_java中jar包和war包之间有什么区别

    原标题:java中jar包和war包之间有什么区别 jar包 简单地说,JAR(Java Archive)是一种包文件格式.JAR文件具有.jar扩展名,可以包含库.资源和元数据文件. 本质上,它是一 ...

  2. UBUNTU中可用的不同VIM包之间有什么区别?vim-gtk和vim-gnome,vim-nox,vim-athena

    UBUNTU中可用的不同VIM包之间有什么区别? 这里讨论了vim-gtk和vim-gnome之间的区别. Ubuntu通常为vim提供两个以上的选项,例如: vim-nox vim-athena v ...

  3. 08 Git中本地工作与远程仓库的同步

    本节视频: 本节的目标对应日常工作的常态,将应对第一次提交中不会遇到的各种"意外".这些意外是多人合作中的正常现象,需要掌握其正确的处理方式. 与上一节相比,本节的新内容是从远程仓 ...

  4. python中randn出错_randn和normal之间的Python区别 - python

    我正在使用Python的randn模块中的normal和numpy.random函数.这些功能与我在http://docs.scipy.org手册中所读的内容非常相似(它们都与高斯分布有关),但是我应 ...

  5. java obervable_RxJava中Observable,Completable和Single之间有什么区别

    Observable 是通用ReactiveX构建块,它是随时间发送值的事件源 . (因此存在ReactiveX扩展到的每种语言) 简而言之,Observable事件是: onNext *(onCom ...

  6. 工薪族巧理财之定期存款中整存整取、零存整取、存本取息之间的微妙区别

    银行的官方术语先给大家普及一下: 定期存款是在存款时约定存储时间,一次或按期分次(在约定存期)存入本金,整笔或分期平均支取本金利息的一种储蓄.按存取方式定期存款分为整存整取定期存款.零存整取定期存款. ...

  7. 是否可以在git中预览藏匿内容?

    我经常把工作放在以后,然后其他的东西出现,几周后,我想检查藏匿,并找出如果我将它应用于当前状态的工作树会发生什么变化. 我知道我可以在藏匿处做一个git diff,但是这显示了工作树和藏匿之间的所有差 ...

  8. (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

    Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...

  9. title在python中是什么意思_python – 在matplotlib中,title()和suptitle()之间有什么区别?...

    我使用subplot()创建了3个子图.现在我想为每个子图添加标题.我应该使用title()和suptitle()中的哪一个? 一般来说,它们之间有什么区别?谢谢! 解决方法: 您可以使用fig.su ...

最新文章

  1. 设计模式 之美 -- 策略模式
  2. ICLR 2019论文解读:量化神经网络
  3. Websphere MQ 开发实例
  4. GWT与Eclipse集成开发初步研究
  5. linux 的压缩文件格式,linux 文件格式压缩
  6. binary_sort 二叉树
  7. MySQL事务及锁机制大揭秘 - 公开课笔记
  8. html 文本框 自动拼接,HTML 中table的结构以及拼接
  9. python支持双向索引_python3 deque 双向队列创建与使用方法分析
  10. 巧替换windows 7中的宋体 simsun.ttc
  11. 云课堂智慧职教计算机基础答案,云课堂智慧职教题库答案护理系内科,智慧职教职业生涯规划答案,智慧职教mooc学院计算机文化基础答案...
  12. aliez歌词_【aLIEz】附平假名歌词(完整)
  13. 20135202闫佳歆-期中总结
  14. php移除excel密码,excel保护密码忘记怎么撤销保护工作表
  15. elasticsearch对analyzed字段无法使用term方法的解决办法
  16. VTK中oberver 和 command 的信息机制详解
  17. 关于windows10系统,玩英雄联盟加载无响应问题的解决办法
  18. CEPH篇 块存储、文件存储和对象存储意义和差异及ubuntu20.4下 ceph安装
  19. 智慧校园人脸识别解决方案
  20. python tell_Python 文件 tell() 使用方法及示例

热门文章

  1. Linux的IPC机制(三):Binder
  2. Android camera开发总结
  3. Java byte 踩坑基础
  4. Android 画虚线 DashPathEffect 使用详解
  5. jquery跟js初始化加载的多种方法及区别介绍
  6. sqlserver 替换字符串中的数字_VBA实用小程序60: 替换图表SERIES公式中的字符串...
  7. Android之工程目录介绍
  8. RxSwift技术路线与参考资料
  9. Swift中使用正则表达式
  10. 为什么要预留字段_「镜前灯电线预留位置」为什么要安装镜前灯 镜前灯电线预留位置...