77、【Ubuntu】【Hugo】搭建私人博客:Detached HEAD

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Hugo】搭建私人博客:Hugo 版本更新

介绍了怎么将 Hugo 升级到最新版本,下面继续分析

搭建私人博客

OK,Hugo 已经升级到最新版了

别忘了把 Paper Mod 也升级回去,之前 blog 【Ubuntu】【Hugo】搭建私人博客:Hugo&PaperMod 兼容问题 采取的是 Paper Mod 降级措施,将 Paper Mod 降级到 v7.0

由于之前 git checkout 到了 v7.0 旧版本,可以看到此时 PaperMod 的工作区进入了 detached Head 分离头指针状态

Detached Head 分离头指针状态是 Git 中一种特殊但常见的工作状态,理解这种状态,能避免丢失提交,搞乱历史等

在理解分离头指针之前,先来看下 HEAD,在 Git 中,HEAD 是一个指针,指向当前所在的 commit 提交,正常情况下,HEAD 指向某个分支,而分支又指向具体的 commit 提交,比如

当切换分支时,Git 移动的是分支指针,而 HEAD 指针始终通过分支指针间接指向 commit

OK,然后再来解释 detached HEAD 分离头指针,当 git checkout 到一个具体的 commit 提交,tag 标签或者远程分支(非本地分支)时,比如

bash 复制代码
git checkout v1.0.0          # tag
git checkout a1b2c3d         # commit hash
git checkout origin/main     # 远程分支(不是本地 main)

此时 HEAD 不再指向任何本地分支,而是直接指向某个具体的 commit 提交,就像下面这样,HEAD 指针脱离了本地分支指针,直接指向 commit

可以看到,HEAD 指针不再指向任何分支指针,处于一种 Detached 状态,孤零零地指向一个 commit 提交

对于 detached HEAD 来说,只读操作是安全的,比如

  • 查看旧代码
  • 编译测试旧版本(当前 PaperMod git checkout v7.0 就是这种情况 )
  • 查看某次提交的文件

这些完全 OK,但是涉及到写入操作时,如果在 detached HEAD 状态下做了新提交,比如

bash 复制代码
git checkout v1.0.0
echo "fix" >> README.md
git add . && git commit -m "hotfix"

此时新的 commit 会被创建,但没有任何分支指向它,而 HEAD 直接指向 D,仍然处于 detached 状态,类似下面这样

这个时候,这个新的孤立提交就很容易丢失,一旦切换到其他分支,这个新的孤立提交 commit D 就悬空了,因为没有本地分支指向它,Git 的垃圾回收未来可能就永久地删除这个提交,所以不要在 Detached HEAD 状态下做任何提交

OK,从 Detached HEAD 恢复时,也分两种情况:

  • 只读操作:只是查看了代码,没做提交,此时可以直接 git checkout master 切回主分支,无副作用
  • 写操作:在 Detached HEAD 下做了重要提交,想保留,可以立即创建新分支指向当前 HEAD,比如 git checkout -b hotfix,创建并切换到新分支 hotfix,此时 hotfix 分支指向刚刚的新 commit 提交,此时提交不再被孤立,后续可以合并到 master 或推送到远端仓库都可以

总而言之,Detached HEAD 是一个只读快照模式,只要不在里面提交重要代码,就完全 OK


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Hugo】搭建私人博客:文章分类

相关推荐
沸速存储2 小时前
整机瓶颈判断思路,自上而下定位卡顿根源
运维·服务器·电脑·内容运营
奈斯先生Vector3 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
乌萨奇也要立志学C++3 小时前
【Linux】网络基础 从零理解网络通信:局域网、跨网传输与 Socket 预备知识
linux·服务器·网络
DLYSB_4 小时前
AIOps 大模型实战:基于 LangChain 运维 Agent 的根因诊断与现场声光播报闭环
运维·langchain·报警灯
RisunJan4 小时前
Linux命令-slabtop(实时显示内核 slab 缓存信息)
linux
一可米6 小时前
gitHub.com Actions自动化发布
运维·自动化·github
智塑未来6 小时前
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景
运维·科技·区块链
蚰蜒螟7 小时前
从内核源码看Linux启动:chroot、execve与MS_MOVE的协奏曲
linux·服务器·网络
酷可达拉斯7 小时前
自动化运维-ansible配置文件与主机清单
linux·运维·自动化·ansible
影视飓风TIM8 小时前
Linux下C语言缓冲区原理 + Git版本控制
linux·c语言·git