【Git】05 分离头指针
文章目录
- 一、分离头指针
- 二、创建分支
- 三、比较commit内容
- 四、总结
一、分离头指针
正常情况下,在通过git checkout命令切换分支时,在命令后面跟着的是分支名(例如master、temp等)或分支名对应commit的哈希值。
非正常情况下,git checkout切换分支时后面跟了一个非分支对应commit的哈希值,此时就会产生分离头指针问题。
例如,项目的版本历史中有如下3次commit,其中两个分别是temp分支和master分支;此时将分支切换到第三个commit(也就是非temp、master分支)上,就会出现detached HEAD提示,即分离头指针问题。
git log
commit e5d60c7d913d427b2e2161f717dff97249dd1f9b (HEAD -> temp)
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:22:51 2023 +0800add temp_testcommit 01df9fd5e046f104312468746168b027f4285c5c (master)
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:22:04 2023 +0800add file1commit db2d096bf27e4e8f4ca42e8b185e973b05e186df
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:21:31 2023 +0800add readme
切换到非分支的commit上,git就会提示当前处在detached HEAD分离头指针状态:
git checkout db2d096bf27e4e
Note: switching to 'db2d096bf27e4e'.You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard 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 <new-branch-name>Or undo this operation with:git switch -Turn off this advice by setting config variable advice.detachedHead to falseHEAD is now at db2d096 add readme
此时HEAD指针并未在某个分支旁边,即头指针与分支分离了:
git log --all
commit e5d60c7d913d427b2e2161f717dff97249dd1f9b (temp)
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:22:51 2023 +0800add temp_testcommit 01df9fd5e046f104312468746168b027f4285c5c (master)
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:22:04 2023 +0800add file1commit db2d096bf27e4e8f4ca42e8b185e973b05e186df (HEAD)
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:21:31 2023 +0800add readme
二、创建分支
当切换到某个commit时,git会提示已进入到分离头指针状态,并显示在该状态下可进行的操作:
a)可在该HEAD(commit)中进行测试、提交或取消更改,当切回到分支时不会影响到分支,但此前在此commit上做的所有操作都会丢失
b)若想保留在该commit上的变动,可通过git switch -c branch_name进行分支添加
分离头指针指向某个commit后,若再切换回master分支或其他分支时,没有为该commit新建分支,则所有在该commit上做的操作都将丢失。
1)在commit上进行修改操作,并进行commit提交
vi readmegit status
HEAD detached at db2d096
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: readmeno changes added to commit (use "git add" and/or "git commit -a")git add readme
warning: LF will be replaced by CRLF in readme.
The file will have its original line endings in your working directorygit commit -m "detach modify file"
[detached HEAD 69cde78] detach modify file1 file changed, 1 insertion(+)git log
commit 69cde788edb4184538f2155ea5e062f5649e8781 (HEAD)
Author: xxx <xxx@163.com>
Date: Thu Nov 9 15:56:42 2023 +0800detach modify filecommit db2d096bf27e4e8f4ca42e8b185e973b05e186df
Author: xxx <xxx@163.com>
Date: Thu Nov 9 10:21:31 2023 +0800add readme
2)当再切回到master分支时,git提示有一个commit未被连接到任意branch分支上,可通过git branch来创建新分支。
git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:69cde78 detach modify fileIf you want to keep it by creating a new branch, this may be a good time
to do so with:git branch <new-branch-name> 69cde78Switched to branch 'master'
3)在未把分离头指针对应的commit创建新branch时,git log中是看不到它的信息的。
git log --all --graph # gitk --all 可调出图形界面
* commit e5d60c7d913d427b2e2161f717dff97249dd1f9b (temp)
| Author: xxx <xxx@163.com>
| Date: Thu Nov 9 10:22:51 2023 +0800
|
| add temp_test
|
* commit 01df9fd5e046f104312468746168b027f4285c5c (HEAD -> master)
| Author: xxx <xxx@163.com>
| Date: Thu Nov 9 10:22:04 2023 +0800
|
| add file1
|
* commit db2d096bf27e4e8f4ca42e8b185e973b05e186dfAuthor: xxx <xxx@163.com>Date: Thu Nov 9 10:21:31 2023 +0800add readme
4)为detach区域建立分支。
git branch detach_branch 69cde78 # 复制前面git提示的命令语句,添加分支名称即可git log --all --graph # 此时版本历史中就能看到detach分支的信息
* commit 69cde788edb4184538f2155ea5e062f5649e8781 (detach_branch)
| Author: xxx <xxx@163.com>
| Date: Thu Nov 9 15:56:42 2023 +0800
|
| detach modify file
|
| * commit e5d60c7d913d427b2e2161f717dff97249dd1f9b (temp)
| | Author: xxx <xxx@163.com>
| | Date: Thu Nov 9 10:22:51 2023 +0800
| |
| | add temp_test
| |
| * commit 01df9fd5e046f104312468746168b027f4285c5c (HEAD -> master)
|/ Author: xxx <xxx@163.com>
| Date: Thu Nov 9 10:22:04 2023 +0800
|
| add file1
|
* commit db2d096bf27e4e8f4ca42e8b185e973b05e186dfAuthor: xxx <xxx@163.com>Date: Thu Nov 9 10:21:31 2023 +0800add readme
5)图形化界面看版本历史
gitk --all

三、比较commit内容
可通过git diff命令来比较两个commit之间的内容差异。
git log --all --oneline
69cde78 (detach_branch) detach modify file
e5d60c7 (temp) add temp_test
01df9fd (HEAD -> master) add file1
db2d096 add readmegit diff 69cde78 e5d60c7 # 后跟两个commit哈希值
diff --git a/file1 b/file1
new file mode 100644
index 0000000..e69de29
diff --git a/readme b/readme
index 9fa5398..e69de29 100644
--- a/readme
+++ b/readme
@@ -1 +0,0 @@
-test detach
diff --git a/temp_test b/temp_test
new file mode 100644
index 0000000..e69de29
git diff后面也可以跟HEAD这样的指针名称,以及用^和~1来表示父类
git diff HEAD HEAD^ # HEAD^ 表示HEAD指针对应commit的父commit
diff --git a/file1 b/file1
deleted file mode 100644
index e69de29..0000000git diff HEAD HEAD^^ # HEAD^^ 父亲的父亲
fatal: ambiguous argument 'HEAD^^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'git diff HEAD HEAD~1 # HEAD~1 <==> HEAD^
diff --git a/file1 b/file1
deleted file mode 100644
index e69de29..0000000git diff HEAD HEAD~2 # HEAD~2 <==> HEAD^^
fatal: ambiguous argument 'HEAD~2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
四、总结
一般情况下,我们切换分支只在已有的几个分支名称之间来回切换,但遇到切换到某个commit的情况时,即出现分离头指针问题时,要懂得该问题是如何产生的,并通过什么样的操作步骤可以去解决它,而不影响到现有分支。此外,分离头指针现象也可以便于我们进行相关的测试,在不影响现有生产的前提下。
相关文章:
【Git】05 分离头指针
文章目录 一、分离头指针二、创建分支三、比较commit内容四、总结 一、分离头指针 正常情况下,在通过git checkout命令切换分支时,在命令后面跟着的是分支名(例如master、temp等)或分支名对应commit的哈希值。 非正常情况下&…...
【Tomcat与网络9】提高Tomcat启动速度的八大措施
本文我们来看一下如何对Tomcat进行调优,我们对于Tomcat的调优主要集中在三个方面:提高启动速度、提高系统稳定性和提高并发能力,后两者很多时候是相辅相成的,我们放在一起看。 Tomcat现在一般都嵌入在SpringBoot里,因…...
蓝桥杯嵌入式第七届真题(完成) STM32G431
蓝桥杯嵌入式第七届真题(完成) STM32G431 题目 相关文件 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**********************…...
如何降低视频RTSP解码延迟
降低RTSP(Real-Time Streaming Protocol)视频流的解码延迟涉及到网络传输和解码处理的优化。以下是一些常见的方法: 选择低延迟的解码器:使用专为低延迟优化的解码器,例如一些定制的H.264或H.265解码器。 优化解码器设…...
【Golang】自定义logrus日志保存为日志文件
背景 为了方便查看日志,项目中需要把日志保存到对应的日志文件中,所以需要当前的配置,以使得日志能够保存到对应的日志文件中。 代码 import ("github.com/orandin/lumberjackrus""github.com/sirupsen/logrus" )func …...
【大厂AI课学习笔记】1.4 算法的进步(4)关于李飞飞团队的ImageNet
第一个图像数据库是ImageNet,由斯坦福大学的计算机科学家李飞飞推出。ImageNet是一个大型的可视化数据库,旨在推动计算机视觉领域的研究。这个数据库包含了数以百万计的手工标记的图像,涵盖了数千个不同的类别。 基于ImageNet数据库…...
【Linux笔记】缓冲区的概念到标准库的模拟实现
一、缓冲区 “缓冲区”这个概念相信大家或多或少都听说过,大家其实在C语言阶段就已经接触到“缓冲区”这个东西,但是相信大家在C语言阶段并没有真正弄懂缓冲区到底是个什么东西,也相信大家在C语言阶段也因为缓冲区的问题写出过各种bug。 其…...
【前端收藏】前端小作文-前端八股文知识总结(超万字超详细)持续更新
有了这个八股文不仅对你基础知识的巩固,不管你是几年老前端程序员,还是要去面试的,文章覆盖了前端常用及不常用的方方面面,都是前端日后能用上的,对你的前端知识有总结意义,看完后,懂的不懂的都…...
GNSS模块的惯导技术:引领定位科技的前沿
全球导航卫星系统(GNSS)模块的惯导技术是一项颇具前瞻性的科技,它结合了全球定位系统和惯性导航技术,为各个领域的定位需求提供了更为精准和可靠的解决方案。本文将深入探讨GNSS模块的惯导技术,以及它如何在多个领域中…...
Flutter 和 Android原生(Activity、Fragment)相互跳转、传参
前言 本文主要讲解 Flutter 和 Android原生之间,页面相互跳转、传参, 但其中用到了两端相互通信的知识,非常建议先看完这篇 讲解通信的文章: Flutter 与 Android原生 相互通信:BasicMessageChannel、MethodChannel、…...
Kubernetes基础(十一)-CNI网络插件用法和对比
1 CNI概述 1.1 什么是CNI? Kubernetes 本身并没有实现自己的容器网络,而是借助 CNI 标准,通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信。 CNI(Container Network Interface,容器网络的…...
yo!这里是单例模式相关介绍
目录 前言 特殊类设计 只能在堆上创建对象的类 1.方法一(构造函数下手) 2.方法二(析构函数下手) 只能在栈上创建对象的类 单例模式 饿汉模式实现 懒汉模式实现 后记 前言 在面向找工作学习c的过程中,除了基本…...
2023年上-未来几年我要做什么
1月份,离职。 2月份,春节休假回来,中旬去参加了一个月的瑜伽培训,学会了倒立、鹤蝉。。。。 3月份,瑜伽培训结束,开始收拾房子,并调研各类项目。 4月份,参与了朋友的区块链项目 …...
智能汽车竞赛摄像头处理(3)——动态阈值二值化(大津法)
前言 (1)在上一节中,我们学习了对图像的固定二值化处理,可以将原始图像处理成二值化的黑白图像,这里面的本质就是将原来的二维数组进行了处理,处理后的二维数组里的元素都是0和255两个值。 (2…...
BGP协议
1.BGP相关概念 1.1 BGP的起源 不同自治系统(路由域)间路由交换与管理的需求推动了EGP的发展,但是EGP的算法简单,无法选路,从而被BGP取代。 自治系统:(AS) IGP:自治系统…...
一个完整工作流管理系统的组成部分
一个完整工作流管理系统的组成部分 一个完整的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户端程序、流程监控、表单设计器、与表单的集成以及与应用程序的集成八个部分组成。 一、工作流组成 1. 工作流引擎 工作流引擎作为工作流管理系统的核心部分&…...
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
在2023年云栖大会上,阿里云数据库产品事业部负责人李飞飞在主题演讲中提到,瑶池数据库推出“DB存储”一体化能力,结合人工智能、机器学习、存储等方法和创新能力,实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的…...
中科大计网学习记录笔记(五):协议层次和服务模型
前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…...
同构异机迁移方案2_目标服务器仅安装数据库软件scp物理文件
源端和目标端的数据库版本需要保持一致,补丁版本可以不一致,目标端磁盘空间不能小于源端空间,目标端只需要安装 Oracle 软件即可。 特别说明:本文档案例Oracle的安装路径不同,数据目录一致,采用scp的方式实…...
华为机考入门python3--(6)牛客6-质数因子
分类:质数、素数 知识点: 取余符号% 5%3 2 取整符号// 5//3 1 list中int元素转str map(str, list) 题目来自【牛客】 def prime_factors(n): """ 输入一个正整数n,输出它的所有质因子(重复的也…...
2026年专升本论文降AI率工具推荐:选题和写作难点解决方案
2026年专升本论文降AI率工具推荐:选题和写作难点解决方案 导师发消息说论文AI率超标的时候,我正在食堂吃饭。筷子都差点拿不稳。 后来用了三天时间研究专升本论文降AI,踩了不少坑但总算搞定了。最后稳定在用的就是嘎嘎降AI(www.…...
2026最权威的五大降AI率方案推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于学术研究范畴之内,AI技术给论文写作予以了高效的辅助支持。当下存在着多款能…...
从arctanx到指数函数:手把手教你用泰勒展开分析复杂函数渐近线
从arctanx到指数函数:手把手教你用泰勒展开分析复杂函数渐近线 数学分析中,函数渐近线的研究往往能揭示函数在无穷远处的行为特征。对于arctanx、指数函数这类常见但特性复杂的函数,泰勒展开提供了一种强有力的分析工具。本文将带你从基础概念…...
实战演练,在快马平台用openclaw命令构建日志分析监控系统
今天想和大家分享一个很实用的技术实践——如何在InsCode(快马)平台上快速搭建一个日志分析监控系统。这个系统主要利用了openclaw命令的强大功能,能够帮助我们高效处理服务器日志数据。 系统整体设计思路 这个日志分析系统主要包含三个核心部分:日志展…...
被OpenClaw的MCP协议彻底刷新认知:一个协议统一所有AI工具调用的底层逻辑
做AI Agent开发的同学,几乎都踩过工具调用的"天坑":为了让大模型对接不同的外部能力,你需要为每一个API、每一套业务系统、每一类数据库写专属的适配代码;换一个大模型厂商,之前的工具调用逻辑几乎全部作废&…...
为什么 Transformer 这么强?——对比 CNN 和 RNN(Version B)
为什么 Transformer 这么强?——对比 CNN 和 RNN(Version B) 📚 《从零到一造大脑:AI架构入门之旅》专栏 专栏定位:面向中学生、大学生和 AI 初学者的科普专栏,用大白话和生活化比喻带你从零理解…...
GCP 成本优化指南
5 分钟速览 我想… 用什么 预期效果 看钱花在哪了 Billing Reports + Cost Table 按服务/项目/标签拆分费用 费用超了自动告警 Budget Alerts 50%/80%/100% 阈值通知 深度分析费用趋势 BigQuery 费用导出 自定义 SQL 分析任意维度 降低计算成本 CUD / Spot VM 计算费用降 30%-7…...
深度测评|2026AI短剧出海服务商
2026 年短剧出海进入全球化传播阶段,声画同步与多语种适配成为短剧出海的基础核心能力,更是保障海外受众观剧体验的关键要素。相较于国内市场,海外受众来自不同的语言区域,对多语种配音的自然度、口型同步的精准度、台词翻译的适配…...
Nano Banana Pro图像生成与编辑技术解析
介绍 Nano Banana Pro 不久前,发布了Nano Banana(Gemini 2.5 Flash图像模型)。从修复旧照片到生成微型模型,Nano Banana在图像编辑领域迈出了一大步,让普通创作者能够表达自己的创造力。今天,推出Nano Bana…...
绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle)
绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle) 📚 绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle) 一、题目描述 输入 输出 样例输入 样例输出 提示 二、题目解读 2.1 什么是"购书方案"? 2.2 样例解释 三、算法选择分析 3.1 为什么不能直接用…...
