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

目录
相关文章
|
Kubernetes API 调度
21道题帮你轻松拿捏 Kubernetes 面试
21道题帮你轻松拿捏 Kubernetes 面试
|
存储 Linux 调度
协程(coroutine)的原理和使用
协程(coroutine)的原理和使用
|
存储 C++ 容器
(3)Qt中的变体数据类型(QVariant)
QVariant是Qt中一个强大的变体数据类型,能够存储和管理多种Qt和C++基本数据类型,包括自定义类型,并通过setValue()和value()方法进行赋值和取值。
1407 9
(3)Qt中的变体数据类型(QVariant)
|
人工智能 搜索推荐 算法
当AI代做PPT时,教师如何完成自我迭代?——从生成式人工智能(GAI)认证看教育者的未来突围
本文探讨了AI在教育领域的广泛应用及其对教师角色的挑战,强调知识观与教育观的转变。生成式人工智能(GAI)认证为教师提供了提升AI应用能力、促进教育创新的机会。文章建议教师通过转变观念、加强情感交流及参与创新实践完成自我迭代,并呼吁政府、学校和社会共同支持AI时代教育的发展,以培养适应未来的高素质人才。
|
消息中间件 SQL NoSQL
再记一次止于三面的阿里面试之旅
Hello 大家好,我是阿粉,最近心情不是很好,因为阿粉面试阿里三面挂掉了, 当收到下面这封邮件的时候阿粉内心是拔凉拔凉的。阿粉被 “Unfortunately”,“another candidate” 这几个词深深的伤害到了。不过伤心归伤心,该自我总结还是得自我总结的,有机会再战。
1379 0
|
调度 C++ 开发者
C++一分钟之-认识协程(coroutine)
【6月更文挑战第30天】C++20引入的协程提供了一种轻量级的控制流抽象,便于异步编程,减少了对回调和状态机的依赖。协程包括使用`co_await`、`co_return`、`co_yield`的函数,以及协程柄和awaiter来控制执行。它们适合异步IO、生成器和轻量级任务调度。常见问题包括与线程混淆、不当使用`co_await`和资源泄漏。例如,斐波那契生成器协程展示了如何生成序列。正确理解和使用协程能简化异步代码,但需注意生命周期管理。
1052 4
|
Linux 开发工具 数据安全/隐私保护
在Linux中,如何添加和管理用户账户以及如何设置sudo权限?
在Linux中,如何添加和管理用户账户以及如何设置sudo权限?
Gitlab一分支的指定提交合并到main
Gitlab一分支的指定提交合并到main
2006 0
|
算法 数据可视化
bilibili视频流量数据潜望镜
bilibili视频流量数据潜望镜

热门文章

最新文章