为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Git
HUX布斯 2019-07-27 14:44:22
在Git中,HEAD,工作树和索引之间有什么区别?有人能告诉我在Git中HEAD,工作树和索引之间的区别吗?据我所知,它们都是不同分支的名称。我的假设是否正确?编辑我找到了这个单个git存储库可以跟踪任意数量的分支,但是您的工作树只与其中一个分支相关联(“当前”或“已检出”分支),HEAD指向该分支。这是否意味着HEAD和工作树总是一样的?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

我使用索引作为检查点

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

笔记:

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

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

  3. 本地资源库是一个隐藏目录(.git),包括objects含回购每个文件的所有版本(本地分支机构和远程分支机构的副本),为压缩“斑点”文件目录。

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

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

  • 标签是标记历史中特定点的固定引用,例如v2.6.29。

  • 相反,总是移动头来反映项目开发的当前位置。

(注意:正如Timo Huovinen 评论的 那样,这些箭头不是提交所指向的,它是工作流程顺序,基本上显示箭头,因为第一次提交的位置是最后一次)1 -> 2 -> 3 -> 414

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

  • 它告诉Git哪个提交从结账时拿走文件,然后

  • 它会告诉Git在提交时将新提交放在哪里。

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


查看完整回答
反对 回复 2019-07-27
?
FFIVE

TA贡献1797条经验 获得超6个赞

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

以下是本章的图片说明:

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

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


查看完整回答
反对 回复 2019-07-27
?
Helenr

TA贡献1780条经验 获得超3个赞

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

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

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


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 1509 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信