今天遇到了和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 TNativeXML Node节点乱码的一种解决方法

    Node1.WriteString(HomologousFieldItem.cXMLNodeCode, AnsiToUtf8(FieldByName(HomologousFieldItem.cMapp ...

  2. 如何给DropDownList控件设置样式(ASP.NET MVC)

    前话: 应学校领导要求,要给后台管理系统添加一个搜索功能,提供可选择选项.我选择使用DropDownList去实现,熟悉.net控件的都知道,DropDownList的样子非常丑,不论是边框长宽还是里 ...

  3. Py3快速下载地址

    pip3.exe install 包名称 -i  http://mirrors.aliyun.com/pypi/simple  --trusted-host mirrors.aliyun.com

  4. JAVA设计模式(09):结构型-代理模式(Proxy)

    代理模式是经常使用的结构型设计模式之中的一个,当无法直接訪问某个对象或訪问某个对象存在困难时能够通过一个代理对象来间接訪问,为了保证client使用的透明性,所訪问的真实对象与代理对象须要实现同样的接 ...

  5. Qemu之Network Device全虚拟方案一:前端网络流的建立

    KVM在I/O虚拟化方面,传统的方式是使用Qemu纯软件的方式来模拟I/O设备,当中包含常常使用的网卡设备.这次我们重点分析Qemu为实现网络设备虚拟化的全虚拟化方案.本主题从三个组成方面来完整描写叙 ...

  6. Java发送邮件的简单实现

    使用Oracle官方的JavaMail进行实现,JavaMail下载地址:https://java.net/projects/javamail/pages/Home 将下载好的jar包加入到工程路径中 ...

  7. Robotium--scroll操作系列

    上下滚动 scrollDown public boolean scrollDown() Scrolls down the screen. Returns: true if more scrolling ...

  8. Linux下几个常用的快捷键,真的很实用

    1. [tab] 键 在linux所有的shell中,[tab]是最常用的也是linux的bash  shell中最棒的功能:它具有命令补全和档案补全的功能.如果不使用[tab]键,那就别说自己懂li ...

  9. (2)入门指南——(2)jQuery可以做什么(What jQuery does)

    The jQuery library provides a general-purpose abstraction layer for common web scripting, and is, th ...

  10. .Net写txt文件-简单的记录执行日志信息代码

    在执行一些批量操作时,想记录一些执行日志信息,越简单方便越好啊.提供一个常用的简单方法,将信息记录在txt文件里: public static void log(string content, str ...