当前位置: 首页 > news >正文

【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内容四、总结 一、分离头指针 正常情况下&#xff0c;在通过git checkout命令切换分支时&#xff0c;在命令后面跟着的是分支名&#xff08;例如master、temp等&#xff09;或分支名对应commit的哈希值。 非正常情况下&…...

【Tomcat与网络9】提高Tomcat启动速度的八大措施

本文我们来看一下如何对Tomcat进行调优&#xff0c;我们对于Tomcat的调优主要集中在三个方面&#xff1a;提高启动速度、提高系统稳定性和提高并发能力&#xff0c;后两者很多时候是相辅相成的&#xff0c;我们放在一起看。 Tomcat现在一般都嵌入在SpringBoot里&#xff0c;因…...

蓝桥杯嵌入式第七届真题(完成) STM32G431

蓝桥杯嵌入式第七届真题(完成) STM32G431 题目 相关文件 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**********************…...

如何降低视频RTSP解码延迟

降低RTSP&#xff08;Real-Time Streaming Protocol&#xff09;视频流的解码延迟涉及到网络传输和解码处理的优化。以下是一些常见的方法&#xff1a; 选择低延迟的解码器&#xff1a;使用专为低延迟优化的解码器&#xff0c;例如一些定制的H.264或H.265解码器。 优化解码器设…...

【Golang】自定义logrus日志保存为日志文件

背景 为了方便查看日志&#xff0c;项目中需要把日志保存到对应的日志文件中&#xff0c;所以需要当前的配置&#xff0c;以使得日志能够保存到对应的日志文件中。 代码 import ("github.com/orandin/lumberjackrus""github.com/sirupsen/logrus" )func …...

【大厂AI课学习笔记】1.4 算法的进步(4)关于李飞飞团队的ImageNet

第一个图像数据库是ImageNet&#xff0c;由斯坦福大学的计算机科学家李飞飞推出。ImageNet是一个大型的可视化数据库&#xff0c;旨在推动计算机视觉领域的研究。这个数据库包含了数以百万计的手工标记的图像&#xff0c;涵盖了数千个不同的类别。 基于ImageNet数据库&#xf…...

【Linux笔记】缓冲区的概念到标准库的模拟实现

一、缓冲区 “缓冲区”这个概念相信大家或多或少都听说过&#xff0c;大家其实在C语言阶段就已经接触到“缓冲区”这个东西&#xff0c;但是相信大家在C语言阶段并没有真正弄懂缓冲区到底是个什么东西&#xff0c;也相信大家在C语言阶段也因为缓冲区的问题写出过各种bug。 其…...

【前端收藏】前端小作文-前端八股文知识总结(超万字超详细)持续更新

有了这个八股文不仅对你基础知识的巩固&#xff0c;不管你是几年老前端程序员&#xff0c;还是要去面试的&#xff0c;文章覆盖了前端常用及不常用的方方面面&#xff0c;都是前端日后能用上的&#xff0c;对你的前端知识有总结意义&#xff0c;看完后&#xff0c;懂的不懂的都…...

GNSS模块的惯导技术:引领定位科技的前沿

全球导航卫星系统&#xff08;GNSS&#xff09;模块的惯导技术是一项颇具前瞻性的科技&#xff0c;它结合了全球定位系统和惯性导航技术&#xff0c;为各个领域的定位需求提供了更为精准和可靠的解决方案。本文将深入探讨GNSS模块的惯导技术&#xff0c;以及它如何在多个领域中…...

Flutter 和 Android原生(Activity、Fragment)相互跳转、传参

前言 本文主要讲解 Flutter 和 Android原生之间&#xff0c;页面相互跳转、传参&#xff0c; 但其中用到了两端相互通信的知识&#xff0c;非常建议先看完这篇 讲解通信的文章&#xff1a; Flutter 与 Android原生 相互通信&#xff1a;BasicMessageChannel、MethodChannel、…...

Kubernetes基础(十一)-CNI网络插件用法和对比

1 CNI概述 1.1 什么是CNI&#xff1f; Kubernetes 本身并没有实现自己的容器网络&#xff0c;而是借助 CNI 标准&#xff0c;通过插件化的方式来集成各种网络插件&#xff0c;实现集群内部网络相互通信。 CNI&#xff08;Container Network Interface&#xff0c;容器网络的…...

yo!这里是单例模式相关介绍

目录 前言 特殊类设计 只能在堆上创建对象的类 1.方法一&#xff08;构造函数下手&#xff09; 2.方法二&#xff08;析构函数下手&#xff09; 只能在栈上创建对象的类 单例模式 饿汉模式实现 懒汉模式实现 后记 前言 在面向找工作学习c的过程中&#xff0c;除了基本…...

2023年上-未来几年我要做什么

1月份&#xff0c;离职。 2月份&#xff0c;春节休假回来&#xff0c;中旬去参加了一个月的瑜伽培训&#xff0c;学会了倒立、鹤蝉。。。。 3月份&#xff0c;瑜伽培训结束&#xff0c;开始收拾房子&#xff0c;并调研各类项目。 4月份&#xff0c;参与了朋友的区块链项目 …...

智能汽车竞赛摄像头处理(3)——动态阈值二值化(大津法)

前言 &#xff08;1&#xff09;在上一节中&#xff0c;我们学习了对图像的固定二值化处理&#xff0c;可以将原始图像处理成二值化的黑白图像&#xff0c;这里面的本质就是将原来的二维数组进行了处理&#xff0c;处理后的二维数组里的元素都是0和255两个值。 &#xff08;2…...

BGP协议

1.BGP相关概念 1.1 BGP的起源 不同自治系统&#xff08;路由域&#xff09;间路由交换与管理的需求推动了EGP的发展&#xff0c;但是EGP的算法简单&#xff0c;无法选路&#xff0c;从而被BGP取代。 自治系统&#xff1a;&#xff08;AS&#xff09; IGP&#xff1a;自治系统…...

一个完整工作流管理系统的组成部分

一个完整工作流管理系统的组成部分 一个完整的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户端程序、流程监控、表单设计器、与表单的集成以及与应用程序的集成八个部分组成。 一、工作流组成 1. 工作流引擎 工作流引擎作为工作流管理系统的核心部分&…...

鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

在2023年云栖大会上&#xff0c;阿里云数据库产品事业部负责人李飞飞在主题演讲中提到&#xff0c;瑶池数据库推出“DB存储”一体化能力&#xff0c;结合人工智能、机器学习、存储等方法和创新能力&#xff0c;实现Buffer Pool Extension能力和智能冷温热数据分层能力。在大会的…...

中科大计网学习记录笔记(五):协议层次和服务模型

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…...

同构异机迁移方案2_目标服务器仅安装数据库软件scp物理文件

源端和目标端的数据库版本需要保持一致&#xff0c;补丁版本可以不一致&#xff0c;目标端磁盘空间不能小于源端空间&#xff0c;目标端只需要安装 Oracle 软件即可。 特别说明&#xff1a;本文档案例Oracle的安装路径不同&#xff0c;数据目录一致&#xff0c;采用scp的方式实…...

华为机考入门python3--(6)牛客6-质数因子

分类&#xff1a;质数、素数 知识点&#xff1a; 取余符号% 5%3 2 取整符号// 5//3 1 list中int元素转str map(str, list) 题目来自【牛客】 def prime_factors(n): """ 输入一个正整数n&#xff0c;输出它的所有质因子&#xff08;重复的也…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...