【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,输出它的所有质因子(重复的也…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
