前言

为了防止 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,然后跳到那个提交,剩下的操作和下面一样)。

刚进行了提交,但是推送没反应,别急,按如下步奏做,东西都还在。

  1. 先创建一个分支 temp ,用于保存现在提交的代码,这样,你的修改与提交记录就保存在了 temp 分支上了

    $ git branch temp
  2. 接下来跳回你要回到的那个分支,我的是要回到 master 分支

    $ git checkout master
  3. 然后将 temp 分支合并到 master 分支,这样,刚才提交的东西,就拿过来了

    $ git merge temp
  4. 合并之后,查看下状态,查看下代码,有冲突就解决掉,没有更好

    $ git status
  5. 检查修改的东西是不是都回来了,没有问题了,就可以把刚才创建的 temp 分支删除了,然后将修改推送到远程仓库

    $ git checkout -d temp
    $ git push origin master

至此,问题解决

分类: Other 标签: Git

评论

暂无评论数据

暂无评论数据

目录