前言
今天在使用git的过程中发现按照往常的commit以后再使用git push origin master命令虽然提示push成功,但是github上面没有没有显示出来,最开始以为遇到bug了,于是重新push,然而提示Everything up-to-date,百思不得其解,最后无意间使用git status命令发现了今天的主角-detached HEAD。下面就来介绍下如何解决push成功但是github上面不显示。
解决detached HEAD
"detached HEAD" state——HEAD头指针指向了一个具体的提交ID,而不是一个分支。
首先使用status命令查看git状态:发现HEAD detached指向了57f51ee,也就是上一次提交
$ git status
HEAD detached from 57f51ee
nothing to commit, working directory clean
然后使用branch命令查看分枝:HEAD指针指向了HEAD detached,也就是上一次的commit并没有提交到master分枝上面。
$ git branch
* (HEAD detached from 57f51ee)
master
解决方法:
使用checkout命令切换到master分枝,这是git会提示落后了一次提交,也就是上一次提交不见了。不要心急,使用git reflog即可查看所有的提交。
$ git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
我们可以看到,在57f51ee HEAD@{2}的时候,HEAD指向了57f51ee这次提交而没有指向master,当我们使用checkout命令切换到master分枝的时候(57f51ee HEAD@{0}),从最新提交e065ee0切换到了上一次提交57f51ee,所以落后了一次提交,这时我们使用reset命令直接将HEAD转向最新提交e065ee0即可。
$ git reflog
57f51ee HEAD@{0}: checkout: moving from e065ee0f51334dc72efc91dea18ad4c05912be08 to master
e065ee0 HEAD@{1}: commit: 新提交
57f51ee HEAD@{2}: checkout: moving from master to 57f51eefd108d6687bce57d04d44056d9acd3a28
57f51ee HEAD@{3}: commit: 完成主界面布局(未添加侧滑菜单等)
总结
首先使用$ git branch查看分枝,如果出现游离分枝,使用$ git checkout master切换到主分支,这时可能丢失了一次提交,使用$ git reflog查看所有提交,找到最新的提交(比如e065ee0),使用$ git reset --hard e065ee0将HEAD指向最新提交即可,然后就可以push了。