Git出现HEAD detached from XXX的解决方法
前言
为了防止 Hexo
相关配置丢失,我使用 Git
对其进行管理,每次进行什么配置都进行一次提交,这样就不用担心以后配置出错导致博客无法使用。
问题起因
在几天前,因为对博客进行了一些配置但是没有起到效果,所以我进行了回退,但是在使用命令时,不是使用的 reset
$ git reset --hard 25d7078
而是使用的 checkout
,唉,好久没用,回退命令都记错了
$ git checkout 25d7078
回退成是成功了(我认为),但是隐患却也留了下来,而本人却不自知。
出现问题
几天后,我又一次的对博客配置进行了修改,测试没有问题以后,进行了提交,然后推送到服务器
$ git add .
$ git commit -m "添加了对静态文件的压缩配置"
$ git push origin master
但是返回的结果却是
Everything up-to-date
嗯?修改了一大堆文件你给我说没有新数据?逗我呢?赶紧上远程仓库查看,新修改确实没有推送进来。
是哪儿出了问题?查看下状态
$ git status
问题出现,显示
HEAD detached from XXX
赶紧到网上查查资料
查询资料
经过查找,成功找到解决方案,有篇博客对这个问题进行了详细的解释,说的比较详细。有兴趣的可以看看
https://blog.csdn.net/u011240877/article/details/76273335
问题所在
通过上面的文章知道, git checkout 25d7078
这种通过提交ID进行回退,HEAD就处于了游离状态,这个状态下历史版本之间互相切换非常方便,但是!!!在这个状态上提交的操作都会开一个匿名分支。
你要是在游离状态进行了修改操作,你又不小心跳到了其他的分支,那么你在匿名分支的提交无法追溯找回(当然其实你可以用 git reflog
查询你在所有分支的操作记录,从中找到你在匿名分支的提交记录)。
解决办法
我不仅执行了 git checkout 25d7078
,而且还进行了大量的修改,怎么办,还有救吗?
答案是:只要你还没有跳到其它分支,那么还有救(当然就算切换了分支其实也还有救→_→,可以用 git reflog
找到之前匿名分支的提交id,然后跳到那个提交,剩下的操作和下面一样)。
刚进行了提交,但是推送没反应,别急,按如下步奏做,东西都还在。
先创建一个分支
temp
,用于保存现在提交的代码,这样,你的修改与提交记录就保存在了temp
分支上了$ git branch temp
接下来跳回你要回到的那个分支,我的是要回到
master
分支$ git checkout master
然后将
temp
分支合并到master
分支,这样,刚才提交的东西,就拿过来了$ git merge temp
合并之后,查看下状态,查看下代码,有冲突就解决掉,没有更好
$ git status
检查修改的东西是不是都回来了,没有问题了,就可以把刚才创建的
temp
分支删除了,然后将修改推送到远程仓库$ git checkout -d temp $ git push origin master
至此,问题解决
本文系作者 @枫雨 原创发布在枫林幻境站点。未经许可,禁止转载。
暂无评论数据