产生的背景就是:跟同事协作父子项目,他提交的子项目代码有问题,我拉取后报错,我就采用版本回滚处理。(后来他又重新提交代码,我又用statch change同步的最新提交内容)。当我想提交时,提示我当前版本为游离状态,无法提交。
具体就是commit的时候,提醒你当前版本为游离状态。当体push时显示的detached head,无法提交。
一、回滚
回滚过程 checkout 版本号
1.1 选中项目,然后选择在vcs中查看git里面的show history.从中挑选可以回滚的版本信息,右键此条记录,拷贝 copy version number.
1.2 在vcs->git->branches->checkout tag or version ,填入上面拷贝版本号。
1.3 此时版本就回退到想要的版本。
注:按照版本号进行回滚,Git 默认假定你不想这样做,所以将 HEAD 从项目中分离出来,也就造成版本游离。
正确的做法应该是:指定新的分支,- 备份工作区 stach change(这一步只是记录,其实对于回滚,它不是正常操作)
这里我还有段操作,因为无法同步最新版本内容,我就又stach change,拉取到最新提交内容。
stach change说明:
备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
二、游离状态重新指定master
过程如下:
1.通过git bash here ,切换到项目路径
104006123@DESKTOP-OA25J31 MINGW64 /d/workspace/workspace-springcloud/SpringCloud Demo ((130256f…))
2.查看git 状态
$ git status
HEAD detached from 1325eb3
3.查看git head 日志记录
git reflog show HEAD@{now} -10
4.查看当前版本分支
$ git branch -v
* (HEAD detached from 1325eb3) ebd3048 更新结构化查询,测试
5.以本地最新提交号,新建分支temp
$ git branch temp ebd3048
104006123@DESKTOP-OA25J31 MINGW64 /d/workspace/workspace-springcloud/SpringCloudDemo ((ebd3048...))
6.切换到主分支
$ git checkout master
Previous HEAD position was ebd3048 更新结构化查询,测试
Switched to branch 'master'
7.master 跟temp版本合并
$ git merge temp
Updating a82a34a..ebd3048
Fast-forward...
104006123@DESKTOP-OA25J31 MINGW64 /d/workspace/workspace-springcloud/SpringCloudDemo (master)
8.本地提交,更新到远程master
$ git push origin master:master
Counting objects: 17, done...
130256f..ebd3048 master -> master
9.删除临时分支temp
$ git branch -d temp
Deleted branch temp (was ebd3048).
104006123@DESKTOP-OA25J31 MINGW64 /d/workspace/workspace-springcloud/SpringCloudDemo (master)$
参考:
http://gitolite.com/detached-head.html
https://www.jianshu.com/p/ae4857d2f868
https://www.cnblogs.com/jimaojin/p/8949736.html