📜  Git – 头部

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

Git – 头部

Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型项目到大型项目的所有项目。 Git 依赖于软件的分布式开发,其中多个开发人员可以访问特定应用程序的源代码,并且可以修改其他开发人员可能看到的更改。

众所周知,git允许一组人一起工作,所有人都使用相同的文件。它还可以帮助团队应对多人编辑相同文件时容易发生的混乱。在使用 Git 时,我们多次看到名为 HEAD 的术语出现在许多地方,例如提交、拉取等。

HEAD是对当前分支中最近提交的引用。这意味着 HEAD 就像一个跟踪当前分支中最新提交的指针。

然而这个定义只是给我们一个关于 HEAD 的基本概述,所以在深入研究 HEAD 之前,让我们先了解两件事,即refshead。

裁判和头

当您将本地目录初始化为 git 存储库时,您会看到创建了一个.git文件夹。现在让我们创建一个文件 demo.txt 并将这个文件添加到暂存区并提交更改。

现在让我们进入 .git/refs 文件夹,我们可以看到另外两个子目录正在创建,它们是 head 和 tags。在heads文件夹中,可以找到master、main等分支名称,以及v0.2、v0.3等标签。这些都是refs的例子。

当我们谈论heads文件夹中的分支名称时,诸如master之类的引用代表该分支上的提示(最新提交ID),这称为head。在这个文件夹中,我们可以为不同的分支找到不同的文件,每个文件将代表该分支的最新提交 ID。因此,如果进行了任何新提交,则此文件会跟踪最新提交。

让我们检查一下主文件的组成如下:

我们可以看到我们的提交正在写入主文件,您可以使用git log命令验证您的提交 ID。

总而言之 refs 和 head 是指向最新提交的指针,以文件的形式,其中文件名代表分支的名称,并且它们包含分支指向的提交 ID。同样,如果您想查看标签,可以在.git/refs/tags路径中看到它们。如果您想了解有关标签的更多信息以及 .git 文件夹中的文件包含哪些内容。

现在让我们回到我们的主要问题 HEAD 是什么?

现在,既然我们已经了解了 refs 和 head,让我们来了解一下 HEAD。 HEAD 可以称为指向当前提交的特殊 ref。但是,HEAD 可能会根据我们在 git 目录中检出的最新提交而改变。我们可以在.git/HEAD文件中查看我们的 HEAD。让我们的 HEAD 文件的组成如下所示:

这告诉 Git 工作目录当前指向主分支。如果我们创建另一个分支,那么它将指向该分支。让我们借助一个例子来看看:

我们可以看到我们已经创建了一个名为 main 的分支,我们的 HEAD 现在指向了主分支。你也可以检查你的.git/refs/heads文件夹。

现在让我们向我们的主分支添加更多提交,并查看我们的 HEAD 指向的位置。

可以使用git show HEAD命令检查您的 HEAD。

我们有 2 个提交,我们的 HEAD 现在指向我们最近完成的提交。您也可以在您的 . git/refs/heads文件夹。

现在让我们谈谈 HEAD 的另一个术语,即分离的 HEAD。

Detached HEAD 意味着当 HEAD 提交没有指向最近的提交时,我们进入一个称为 detached HEAD 的状态。

您可以使用命令更改 HEAD 的指向 -

git checkout 

我们创建了 2 个提交,我们的 HEAD 指向我们在文件中添加“Hello Geeks”的第二个提交,所以让我们将 HEAD 指向我们创建的第一个提交。

我们可以看到最后一行表明HEAD 现在位于 01cbf53 Created demo.txt 。基本上它告诉 HEAD 现在指向提交 01cbf53。让我们在 .git/HEAD 中检查我们的 HEAD 文件。

只要我们输入 git checkout 命令,我们就可以看到我们的工作存储库现在返回到我们放置的提交 ID。你可以检查你的demo.txt 。它将是空的,因为在第一次提交中我们刚刚创建了 demo.txt。

是的,我们得到了与预期相同的提交 ID。

但是,如果我们只想恢复该特定文件,我们可以运行以下命令,如下所示:

git checkout