Git 中的“分离 HEAD”状态是什么意思?


解释 − 在 Git 中,HEAD 是一个引用指针,指向当前分支中的当前提交。下图显示有两个提交“Commit#1”和“Commit#2”,其中“Commit#2”是最新的提交。Git 中的每个提交都会引用其之前的提交。这里,“Commit#2”会引用“Commit#1”。当前分支是 master。master 指针指向最新的提交,即“Commit#2”。HEAD 指向master。换句话说,HEAD 通过master 指向最后一个提交。

要检查HEAD 指向哪里,我们可以在 Git bash 中使用以下命令

$ cat .git/HEAD

输出

ref: refs/heads/master

输出清楚地表明 HEAD 指向 master。

什么是分离的 HEAD?

在上面的示例中,HEAD 指向一个分支,该分支又指向一个提交。简而言之,HEAD 间接指向提交。在这种情况下,HEAD 被称为已连接。

HEAD 指针从其默认位置移动时,我们会收到“分离 HEAD 状态”的警告。这仅仅意味着HEAD 没有指向任何分支,而是现在指向一个特定的提交。换句话说,如果HEAD 指向一个特定的提交,则称其为分离的。

让我们用一个例子来理解这一点。在 Git bash 终端中执行以下命令以查看提交历史 -

$ git log −−oneline

下面给出的输出表明有 3 个提交,并且HEAD 指针当前指向 master

089ddf4 (HEAD −>master) new line
c81c9ab This is a short description 8a3d6ed first commit

现在让我们将HEAD 指针从其默认位置移动,并使其指向输出中显示的提交哈希之一。在这里,我们将使用git checkout 命令使HEAD 指向提交哈希“8a3d6ed”。

$ git checkout 8a3d6ed

输出如以下屏幕截图所示。

dell@DESKTOP−N961NR5 MINGw64 /e/tut_repo (master)
$ git checkout 8a3d6ed
Note: switching to '8a3d6ed' .

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can di scard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using −c with the switch command. Example:

   git switch −c
Or undo this operation with:
   git switch −

Turn off this advice by setting config variable advice . detachedHead to fal se

HEAD is now at 8a3d6ed first commit
dell@DESKTop−N961NR5 MINGW64 /e/tut_repo ((8a3d6ed.. .))

警告表明HEAD 已分离。这意味着HEAD 现在指向提交“8a3d6ed”。让我们通过执行以下命令来验证这一点 -

$ cat .git/HEAD

以上命令将返回HEAD 指针的内容。

输出

8a3d6ed9e95a94bc78d497fa20bc3d84a7e762fd

更新于: 2021年2月20日

1K+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.