git 游离的head

本文介绍了Git的HEAD指针在切换分支时的作用,以及如何进入和管理游离状态。当通过commit_id切换导致HEAD游离时,虽然方便在历史版本间切换,但会产生不可见的提交。如果在游离状态下提交,需通过创建临时分支保留改动,然后合并回目标分支。解决方法包括提交本地更改,创建临时分支,切换回原有分支,合并临时分支,最后删除临时分支。
摘要由CSDN通过智能技术生成

git 指针

在这里插入图片描述

所以切换分支的本质就是移动HEAD 指针。

游离原因

一般我们会使用命令 git checkout <branch_name>来切换分支,HEAD 就会移动到指定的分支上。

但是,如果我们使用的是git checkout <commit_id> 来切换到指定的某一次提交,HEAD 就会处于「detached」状态,也就是游离状态。

HEAD 游离状态的利弊

好处:HEAD 处于游离状态时,开发者可以很方便地在历史版本之间互相切换,比如要回到某次提交,只需要 checkout 对应的 commit id 或者 tag 名即可。

弊端:若在该基础上进行了提交,则会新开一个「匿名分支」;也就是说我们的提交是无法可见保存的,一旦切换到别的分支,原游离状态以后的提交就不可追溯了。

问题现象:

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 Or undo this operation with: git switch- Turn off this advice by setting config variable advice.detachedHead
to false HEAD is now at da589bf6 

解决办法

此时运行git branch -a发现有(HEAD detached at xxx)这种奇怪的本地版本 这样的提示.

对git checkout commit_id后出现游离态

1. git commit					# 对本地修改进行提交 (提交完你的本地分支指向的是你刚commit完的状态码 类似:06763f6)可以通过git reflog查看操作记录
2. git branch temp  06763f6		 #这句执行是在本地创建一个temp分支 并将你刚才commit的内容放到新分支里面存储
3. git checkout temp 			#切换到刚才新建的分支 (如果你已经处于temp分支 可以忽略这一步)
4. git checkout master 			#切换到你原来的开发的分支 (master只是一个分支 你可以切换到你的任意分支 )
5. git merge temp 				#将之前存储到short分支上的内容合并到你当前的分支上
6. git branch -d temp 			#删除short临时分支 (可以不删除)ps:有的电脑上-d参数不生效 需要-D才生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值