今天遇到了和CSDN上博主相同的问题,就是使用git -branch -a 发现自己处于一个零时的分支上。这篇博文写的不错,转载记录一下。

转载:http://blog.csdn.net/lili625/article/details/46583217

+ git fetch --all
Fetching origin
Address ip地址 maps to git地址, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
+ git checkout master
Previous HEAD position was 8928318... add test file
Switched to branch 'master'
Your branch and 'origin/master' have diverged,
and have 1487 and 409 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
+ git pull
Address ip地址 maps to git地址, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Auto-merging upgrade-framework/conf/shell.xml
CONFLICT (add/add): Merge conflict in upgrade-framework/conf/shell.xml
Auto-merging upgrade-framework/conf/replace.xml
CONFLICT (add/add): Merge conflict in upgrade-framework/conf/replace.xml
……

其中“Your branch and ‘origin/master’ have diverged”这句话引起了我的注意,翻译成汉语就是“你所在的分支和’origin/master’分支有分歧”,由于上一条命令是git checkout master,因此当前所在的分支是master,最终的含义是master分支和origin/master分支有分歧。我们都知道git仓库默认的分支是master,origin/master是远端与之对应的分支,为什么会有分歧呢?我们具体看一下。 
首先在本地master分支上运行git status检查了状态,发现nothing to commit,working directory clean。于是运行git checkout origin/master切换到origin/master分支看看有什么发现没有,果然有: 
 
切换分支后信息提示我正处于’detached HEAD’状态。detached是游离的意思,HEAD是git中具有特殊意义的名词。

你可以认为 HEAD(大写)是”current branch”(当下的分支)。当你用git checkout切换分支的时候,HEAD 修订版本重新指向新的分支。有的时候HEAD会指向一个没有分支名字的修订版本,这种情况叫”detached HEAD”。head(小写)是commit对象的引用,每个head都有一个名字(分支名字或者标签名字等等),但是默认情况下,每个叫master的repository都会有一个head, 一个repository可以包含任意数量的head。在任何时候,只要这个head被选择成为”current head“,那么这个head就成了HEAD,总是大写。——摘自segmentfalt

上面这段话摘自网络回答,定义HEAD的同时也解释了什么叫做’detached HEAD’,即现在HEAD指向的是一个没有分支名字的修订版本,“游离”于已知的所有分支之外。到这里,我猜测控制台报的错应该和游离HEAD有关系。自然而然地,如果想要解决git对接jenkins时报的错,那需要解决掉’detached HEAD’问题。 
于是我尝试commit: 
 
发现和在master分支时一样,没有需要commit的,但是红字标识HEAD detached at origin/master,再一次验证了HEAD从origin/master分支游离出去了。 
查看分支的最新修改: 
 
这里看到带上游离HEAD所在的未命名分支在内的三个分支的最新一次commit id都是a239482。回头看第一张图片,里面有句话“HEAD is now at c90b1ca…新增test.txt文件”。test.txt文件是我为了做测试弄清楚分支状况新增的文件,之后进行了一次修改,新增肯定在修改之前。不知道什么原因造成的HEAD仍然停留在新增test.txt文件这里没有继续向前走。

在网上搜查了很多资料,最后发现解决这个问题并不复杂。简单来说,游离HEAD的问题就在于它没有一个具体的分支名,那我们给它命个名:git branch temp c90b1ca(将HEAD指向的commit命名为分支temp),然后切换到分支master上,执行merge命令(git merge temp),最后push到远端。做完这一系列操作之后再次查看分支的最新修改,发现游离出去的分支不见了,取而代之的是temp分支。

不出意外,git对接jenkins时出现的问题也消失了。

Git之detached HEAD的更多相关文章

  1. git branch detached from jb4.2.2_1.0.0-ga

    /*************************************************************************** * git branch detached f ...

  2. Git HEAD detached from XXX (git HEAD 游离) 解决办法

    本文 Git 图片主要来自:图解 Git,非常感谢! 读完本文你将了解: 什么是 HEAD HEAD 游离状态的利与弊 具体解决操作 Thanks 什么是 HEAD Git 中的 HEAD 可以理解为 ...

  3. git HEAD detached from origin 问题的解决

    这个问题是因为分支选错了,所以说后续的提交都提交到了一个匿名分支之上,整个状态是游离了的 下面说一下我解决问题的步骤 1.查看在游离状态下提交的最新commit号 git branch -v 2.创建 ...

  4. git reset soft,hard,mixed之区别深解

    GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难以理解,只要你理解到这个命令究竟在干什么. 首先我们来看几个术语 HEAD 这是当前分支版本顶端的别名,也就是在当前分支 ...

  5. git tag的使用

    查看所有的标签git tag 删除某一个标签git tag -d tagName 创建带注释的标签 git tag -a tagName -m "annotate" 轻量级标签 g ...

  6. git 本地代码冲突解决,强制更新

    git reset soft,hard,mixed之区别深解 git reset --hard  强制更新覆盖本地   GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难 ...

  7. Git系列①之仓库管理互联网托管平台github.com的使用

    互联网项目托管平台github.com的使用 1.安装git客户端 # yum install -y git 配置git全局用户以及邮箱 [root@web01 ~]# git config --gl ...

  8. git之一: git基础

    参考: SourceTree使用 git教程 廖学风git  文档1 文档2 1. git 概念介绍 工作区: 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区,工作区下面有. ...

  9. [skill][git] git 常用操作记录

    傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1 一本书: https://git-scm.com/book/en/v2 ...

随机推荐

  1. delphi 通过控件的handle取得控件

    例子代码如下: vartsg:TstringGrid;begintsg:=Tstringgrid(FindControl(handle));//正常使用TstringGrid//tsg......./ ...

  2. Do's and Don'ts for Android development

    Do's and Don'ts for Android development, by Futurice developers Use Gradle and its recommended proje ...

  3. [log4j] 可用案例

    可用的 log4j 配置, log4j.properties log = /Users/grs/Documents/log4j log4j.rootLogger = DEBUG, FILEROLING ...

  4. libvirt API管理hypervisors

    发布一段C代码,用于连接指定的KVM宿主机器,获得该宿主机器的配置信息,以及该主机上所有的虚拟主机列表.状态及配置信息: #include <stdio.h>#include <st ...

  5. I - Strategic Game - hdu 1054(最小点覆盖)

    题意:用最小的点来覆盖全部的边,因为二分图里面最大的匹配就是最小覆盖,所以直接匹配一下即可 ****************************************************** ...

  6. jQuery官网一个关于菜单的例子

    来源地址:https://my.oschina.net/xngiser/blog/28323 <ul id="menu"> <li class="men ...

  7. Windows下搭建MySQL Master Slave[转]

    Windows下搭建MySQL Master Slave 一.背景 服务器上放了很多MySQL数据库,为了安全,现在需要做Master/Slave方案,因为操作系统是Window的,所以没有办法使用k ...

  8. rman catalog (rman 恢复目录)

    受控制文件大小的限制,一般rman需要用rman catalog来管理及存放备份信息: 这里介绍一下创建rman catalog的步骤: C:\Documents andSettings\Admini ...

  9. Java基础知识强化20:面向对象和面向过程的思想对比

    面向对象与面向过程的区别  1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...

  10. Android - Service启动机制

      以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luoshe ...