bug
push
时出现问题:git status: HEAD detached from origin/master
原因:分支选错了,后续的提交都提交到了一个匿名分支之上,整个状态是游离了的
如图, 此时处于一个匿名分支, 此前在 vs code 进行commit->push时, 分支关系没有理清
迷思:什么是 HEAD
Git 中的 HEAD 可以理解为一个指针,我们可以在命令行中输入 cat .git/HEAD
查看当前 HEAD 指向哪儿,一般它指向当前工作目录所在分支的最新提交
图中head指向main
使用git checkout [argument]
可以切换到某个分支, argument此时为branch的名字, 也可以切换到某次commit
-
当使用
git checkout < branch_name>
切换分支时,HEAD 会移动到指定分支 -
但是如果使用的是
git checkout < commit id>
,即切换到指定的某一次提交,HEAD 就会处于 detached 状态(游离状态)!!!
问题的本质为切换head后没有指定到底应该继续原分支还是继续新分支
这样会导致git 在这个基础上提交新开的一个匿名分支!
-
进入了一个新的匿名分支
我们的提交是无法可见保存的,一旦切到别的分支,游离状态以后的提交就不可追溯了,因而触发git的保护机制, 出现问题,无法切换分支
解决方法:
- 查看在游离状态下提交的最新commit号
git branch -v
- 创建一个临时的分支,用来保存此匿名分支下的内容
git branch temp
新建一个名字叫temp的分支,用这个分支会自动存有匿名分支的内容
-
切换到刚刚创建的temp分支, 此时发现,匿名分支消失
git checkout temp
temp 为刚刚创建的分支
再查看分支情况
匿名分支消失!!
若要保留此次更改, 则而后切换到main分支
git merge temp
即可将改动merge到本地main分支git branch -D temp
删除临时分支
此处不再赘述.