Git HEAD指针

HEAD 指针,用于记录当前工作的位置,可以指向Commit,也可以指向branch。

可以使用 【git checkout 哈希码】 来移动HEAD指针。

Git 分离头指针状态

通常,我们工作在某一个分支上,比如 master 分支。当指向branch时commit提交后,master 指针和 HEAD 指针一起前进的,每做一次提交,这两个指针就会一起向前挪一步。

但是在某种情况下(例如 checkout 了某个commit),master 指针 和 HEAD 指针这种「绑定」的状态就被打破了,变成了分离头指针状态。下图就是处于分离头指针状态的情况:

Git分离头指针状态

 

在“分离头指针”的状态的操作(如add)是无效的,没有任何意义。

如何解决Git 分离头指针导致的commit丢失

解决办法如下,首先通过下面的命令找到丢失的commit id

Git分离头指针状态

再执行

git merge 3f263a6

实例演示

HEAD指针默认指向当前的分支,用星号表示Head所在位置,如master *

Git HEAD指针和branch指针

移动HEAD指针,git checkout C1。 这个时候HEAD指针指向的是快照,这个时候指针的状态称之为头指针分离状态,detached。

Git HEAD指针和branch指针

HEAD指针在分离状态下提交,git commit, 分支指针不会动。

Git HEAD指针和branch指针

再次移动HEAD指针,让它指向master分支指针 git checkout master

Git HEAD指针和branch指针

在master分支指针上提交git commit
这个是正常的提交,和分离状态下的提交是不一样的。HEAD指针和分支指针同时移动。

Git HEAD指针和branch指针

将HEAD指针移动到detached状态的快照git checkout C2

Git HEAD指针和branch指针

添加新的分支git branch new

Git HEAD指针和branch指针

移动已存在的分支到detached状态的分支 git branch -f master C2 这个时候master分支以前的快照C3就变成了detached状态了

Git HEAD指针和branch指针

PS:分离头指针的妙用,来自 https://blog.csdn.net/qq_32452623/article/details/79415990

“排查问题的时候,checkout 到怀疑的 commit 点上去做些测试,detached HEAD会保护你的现有分支不受影响,测试完了不想保存直接 checkout 到其他地方,可以放弃修改。想保存修改,可以创建一个 git checkout -b <new-branch-name> 新分支保存。”

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值