【git 基础】detached HEAD state的出现和解决

前言:

这是一个错误的提示。出现的原因是之前有一个提交。那这个提交呢是提交了一个文件,然后我因为找不到了,所以就缺靠了在这个提交的这样的一个哈希值上,这样的话后面就从这个之前的分支上分离出来,然后系统就每次提交之后呢他都会提示我,我现在是在一个分离的头上面。那么出现这个分离投的有一个坏处就是有可能你的修改会在一次合并中丢失掉,所以呢是需要解决的。


理论:

我们首先要了解什么是head。|这样才能理解什么叫分离头。

什么是 HEAD?

在 Git 中,HEAD是一个特殊的指针,它始终指向以下功能:

  • 通常指向当前所在的分支(例如 main、dev 等)
  • 间接指向该分支最新的提交 (commit)
  • 可以理解为 "你当前正在查看的位置"

正常情况下,HEAD会附着在某个分支上(称为 "attached HEAD"),当你提交新内容时,分支会随着HEAD一起向前移动。

Head可以理解为就是一个git版本的一个指针指向的标记。

当一个提交在这个状况下生成的时候,那么分支会自动指向一个新的提交。自动指向一个分支的原因是,我们可以看到从b到c到d的这个终端它都是一个连续的直线。在这种情况下就会自动生成我们叫branch或者mastr的 head.


什么是分离头指针状态(detached HEAD state)?

HEAD直接指向某个具体的提交 (commit) 而非分支时,就处于分离头指针状态:

  • 此时git status会显示HEAD detached at <commit-hash>
  • 你看到的是项目在该特定提交时的状态
  • 这不是错误状态,而是 Git 的正常工作模式之一

这个就是前面说到的出现这个问题的原因。


为什么会进入分离头指针状态?

常见的场景包括:

  1. 检出某个具体的提交:git checkout <commit-hash>
  2. 检出标签 (tag):git checkout v1.0.0(标签本质上是特定提交的别名)
  3. 查看远程分支的特定状态而没有创建本地分支
  4. 通过 Git 历史查看工具直接跳转到历史版本

首先:在commit这里,checkout一个版本,HEAD会直接指向这个提交b。也就是head指向了一次提交。而不是指向一次有名称或者有标记定义的提交。

Head指向了一次提交,看起来并没有什么问题。但是如果我们随后经过多次的这样的指向提交之后。

那么我们可以看到,这次已经指向了f。到目前为止还都一切正常,但是错误就会发生在下面这个操作。

当我们 check out. Master.之后。原来只像某一个特殊的comic的提交,就丢失了指向的指针。

我们看到f,它的指向丢失了。 Git.有垃圾回收机制会回收这些没有指向的提交。那么f就有可能被垃圾回收机制给清除掉。

通过构建一个新的branch,然后来避免这个问题的发生。

bash 复制代码
$ git checkout -b foo  # or "git switch -c foo"  (1)
$ git branch foo                                 (2)
$ git tag foo                                    (3)

上面这个代码就是首先check out那个b点。选择b点的原因是因为我们是从b点选择了一个commit点分离出来。在check out b之后我们用 git branch来创建一个branch foo。当然也可以用 tag来打一个标签。

这样就给detached HEAD f,一个正确的branch foo的参考,当然,也包括tag


实践:

1 git history

2 找到detached 部分

3 checkoout

4 做一个branch


问题:

如果你已经弄丢了这个detached 分支。可以用下面的方法恢复。

bash 复制代码
$ git reflog -2 HEAD # or
$ git log -g -2 HEAD
相关推荐
fengyehongWorld7 小时前
Git 认证凭据管理
git
暮云星影15 小时前
git版本发布
git·gitee·github·gitea
乌夷15 小时前
Git Flow 分支模型
git
独隅16 小时前
VS Code Git 工作树多分支并行开发实战评测
git
暮云星影21 小时前
git仓库分支管理
git·gitee·github·gitea
互联网中的一颗神经元2 天前
ZZ — Git 速查表
大数据·git·elasticsearch
早安试言2 天前
git使用
git
燐妤2 天前
梦绘片场 ProjectDream故事总纲场景剧本篇:从项目到成片的 AI 漫剧工作台
人工智能·git·ai·项目开发
JackieDYH2 天前
Git 与 GitHub 新电脑配置指南(从零开始)
git·github·工具·使用教程
Jeanyia3 天前
GitLab 配套 Git 常用命令
git·gitlab