Git| 小朋友,你是否知道分离头指针呢?

简介: 本文的主要围绕着下面这个问题展开的,在阅读之前可以先自己思考一下问题的答案是什么:HEAD怎么理解? 分离头指针是个什么玩意?

本文的主要围绕着下面这个问题展开的,在阅读之前可以先自己思考一下问题的答案是什么?

  • HEAD怎么理解?
  • 分离头指针是个什么玩意?

HEAD翻译为“头部”,在Git中我们一般称为“头指针”,主要表示当前工作区基于哪个版本进行开发,也可以理解为当前开发所在分支的最后一次提交

我们一般切换分支都是使用已经创建的分支,例如git checkout master。另外还有一种操作,就是基于某次提交记录(git checkout commit版本号),如下图所示

image-20220406205557388.png

这种操作切换的工作区没有在任何一个分支上面,与任何一个都没有关系。如果后续没有进行保存,在这个上面做的修改会被 git 彻底丢弃。

从提示信息我们可以看出这是出于detached HEAD的状态,网上解释说这是分离头指针的状态,总感觉有点怪怪的。说人话这就是一种在分支之外的开发状态。


此时我们通过查看.git/HEAD文件会发现,里面原来存放的分支名称变成了提交记录的版本号。正是我们上面切换分支时使用的提交记录版本号。

image-20220407111307732.png

如果我们做了修改,并且提交修改记录,以前的分支名变成了detached HEAD 最新的提交版本号,提示信息会发现如下所示

image-20220407112850439.png

如果这时候我们需要切回其他分支,Git 会给我们一些提示信息,告知我们有一些修改没有关联分支,并且给了我们新建分支的建议。

image-20220407113153814.png

想要保存原来在无分支状态做的修改,可以使用基于提交记录新建分支的命令

git branch <new-branch-name> a8dfef1

除此之外,我们还可以使用其他方式保存这些修改。当我们处理分离头指针的状态时,我们可以使用下面的命令创建分支。

git switch -c <new-branch-name>

假设我们不想创建新的分支,我们还可以直接把内容合并到其他分支,比如我们想把内容合并到dev分支,则可以借鉴下面的命令。

# 切换到需要合入代码的分支
git checkout dev
# 使用分离头指针状态下提交记录的版本号
git merge <commit版本号>

image-20220407114547191.png

那么分离头指针操作,适合的场景都有哪些呢?

如果我们想基于某次提交做一些新的尝试,而且不确定这些代码要不要合入正式分支的时候,可以使用这种方式。在上面的修改不会影响其他分支的现有状态,也不用创建新的分支。

如果修改以后发现方案行不通,可以直接切换到其他分支,这里的修改后面会被Git丢弃掉。如果需要保存的话,可以创建新的分支,或者把修改的代码合入某个分支。

总结

分离头指针.png

目录
相关文章
|
3月前
|
存储 人工智能
【生命的分支:揭秘二叉树的神奇编码】
【生命的分支:揭秘二叉树的神奇编码】
|
11天前
|
Linux 开发工具 git
还不会 Git 子模块操作?一文教你学会 git submodule 的增、删、改、查!
还不会 Git 子模块操作?一文教你学会 git submodule 的增、删、改、查!
|
4月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 138. 复制带随机指针的链表 算法解析
☆打卡算法☆LeetCode 138. 复制带随机指针的链表 算法解析
|
6月前
|
存储
链表(超详细--包教包会)
链表(超详细--包教包会)
|
8月前
|
算法 C++
复制带随机指针的链表:奇妙的拷贝之旅
题目要求对一个带有随机指针的链表进行深拷贝,复制链表中的节点值、next 指针和 random 指针都应指向复制链表中的新节点。我们需要设计一个算法,满足这些条件,输入为原链表的头节点 head。
58 0
|
10月前
|
存储 编译器 C语言
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】(下)
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】(下)
|
10月前
|
存储 编译器 C语言
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】(上)
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】
|
存储 算法
数据结构之单链表一生的历程(创建一个线性表,动态分布空间,单链表创建的思路,单链表的增、删、改、毁)
数据结构之单链表一生的历程(创建一个线性表,动态分布空间,单链表创建的思路,单链表的增、删、改、毁)
|
存储 算法
【基础篇】5 # 链表(下):写好链表代码的六个实用技巧
【基础篇】5 # 链表(下):写好链表代码的六个实用技巧
67 0
【基础篇】5 # 链表(下):写好链表代码的六个实用技巧
|
存储 缓存 开发工具
git的几种实用操作(合并代码与暂存复原代码)
git的几种实用操作(合并代码与暂存复原代码)
272 1
git的几种实用操作(合并代码与暂存复原代码)