📜  Git – HEAD、工作树和索引之间的区别

📅  最后修改于: 2022-05-13 01:58:10.735000             🧑  作者: Mango

Git – HEAD、工作树和索引之间的区别

Git 作为版本控制系统在其正常操作中管理和操作三棵树:

  • HEAD:上次提交快照,下一个父级
  • 索引:提议的下一个提交快照 
  • 工作目录:沙盒

HEAD 是指向当前分支引用的指针,它又是指向该分支上最后一次提交的指针。这意味着 HEAD 将是创建的下一个提交的父级。将 HEAD 视为您在该分支上的最后一次提交的快照通常是最简单的。

它包含什么?

采用 git ls-文件 -s 看看它的样子。您应该看到如下内容:

100644 a906cb2a4a904a152e80877d4088654daad0c859 0 README   
100644 8f94139338f9404f26296befa88755fc2598c289 0 Rakefile  
100644 47c6340d6459e05787f644c2447d2595f5d3a54b 0 lib/simplegit.rb

工作树

这是您的文件所在的位置,您可以在将它们提交到暂存区(索引)然后提交到历史记录之前尝试更改。

让我们看看这三棵树是如何协同工作的?

Git 的典型工作流程是通过操作这三棵树,以连续更好的状态记录项目的快照。看看这张照片:

Git 典型工作流程

为了获得良好的可视化理解,请考虑这种情况。假设您进入一个新目录,其中包含一个文件。调用这个文件的 v1。它以蓝色表示。运行git init将创建一个带有指向未出生主分支的 HEAD 引用的 Git 存储库

此时,只有工作目录树有任何内容。现在我们要提交这个文件,所以我们使用 git add获取工作目录中的内容并将其复制到索引中。

然后我们运行git commit ,它获取索引的内容并将其保存为永久快照,创建指向该快照的提交对象,并更新 master 以指向该提交。

如果我们运行 git status,我们将看不到任何变化,因为所有三棵树都是相同的。