git版本回退和游离状态解决

产生的背景就是:跟同事协作父子项目,他提交的子项目代码有问题,我拉取后报错,我就采用版本回滚处理。(后来他又重新提交代码,我又用statch change同步的最新提交内容)。当我想提交时,提示我当前版本为游离状态,无法提交。
具体就是commit的时候,提醒你当前版本为游离状态。当体push时显示的detached head,无法提交。

一、回滚

  1. 回滚过程 checkout 版本号

    1.1 选中项目,然后选择在vcs中查看git里面的show history.从中挑选可以回滚的版本信息,右键此条记录,拷贝 copy version number.
    1.2 在vcs->git->branches->checkout tag or version ,填入上面拷贝版本号。
    1.3 此时版本就回退到想要的版本。
    注:按照版本号进行回滚,Git 默认假定你不想这样做,所以将 HEAD 从项目中分离出来,也就造成版本游离。
    正确的做法应该是:指定新的分支,

  2. 备份工作区 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

你可能感兴趣的:(学习)