原理: 利用 游离状态 的那个 版本号创建一个新的分支, git  branch xxx 游离版本的版本号。这时,这个新创新的分支的代码就是我们 这个版本号中的代码了。在切换分支到主分支master:git checkout master  .。最后 把新创建的那个分支融合到我么你的主分支上,这样游离状态的代码就融合到我们主分支上了。游离状态也解除了。

游离状态 本质上是  本地的HEAD 指向了一个 未知的分支,H EAD不会指向任何分支,严谨的说是HEAD指向了一个没有分支名字的修订版本,此时恭喜你,已经处于游离状态了。

操作如下:

今天使用git的时候在终端发现这样一条信息
HEAD detached at head

心里一惊,艾玛这是什么状态?
其实我们知道, git checkout 本质上是修改HEAD里面的内容来让它指向不同分支的,而HEAD文件指向的分支就是我们当前的分支,但是有时候HEAD不会指向任何分支,严谨的说是HEAD指向了一个没有分支名字的修订版本,此时恭喜你,已经处于游离状态了(detached HEAD).这时候我们在进行commit操作不会提交到任何分支上去.

这个时候输入 git status 查看当前状态发现我没有在任何本地分支上也验证了刚才的猜想,而这时候我又作死的进行了commit操作,git提示我

Warning: you are leaving 1 commit behind, not connected to
any of your branches:
  fef4501 interrationRecord page completed
If you want to keep them by creating a new branch, this may be a good time
to do so with:
 git branch <new-branch-name> fef4501

然后我欢天喜地的git checkout ask_11_16切换到工作分支以为万事大吉,艾玛坑爹啊,我特么辛辛苦苦写了一天的代码呢?不过这时候我们回看上面那段提示,智能的git告诉我如果我还想要这次提交的话,可以创建一个新的分支,同时把本次提交的id告诉了我:fef4501.
那么这时候我已经有了一个思路:

  1. 基于本次提交创建一个临时分支.
  2. 然后merge到我当前工作分支.
  3. 删除临时分支

基于本次提交创建临时分支

输入
$git branch temp fef4501
使用git branch 分支名 操作ID 这句命令能够创建一个新的分支,但要注意此时我们还没有切换到这个分支上,这个分支上面代码跟我刚才提交完之后的一样.

切换到工作分支并合并代码

输入
$git checkout ask_11_16
意味着我已经切换到ask_11_16分支,这个分支是我之前想要提交的分支.
然后
$git merge temp
这行命令过后我们已经上次commit合并到ask_11_16上了,此时终端状态为
Your branch is ahead of 'origin/ask_11_16' by 1 commit.
我们只需要$git push即可把本次提交push到远程分支.
这时候检查代码,perfect!正式我们想要的状态.

删除temp分支

大功告成,至于temp分支已经没有了利用价值,本着过河拆桥的精神我不得不输入
$git branch -d temp
来删除temp分支.

git是一个很优秀的版本控制工具,利用得当能让我们在团队协作时候如鱼得水,但是万一有操作失误,也会让很多不熟悉git命令的人各种发愁,下面贴一个git命令大全,非常实用。

git命令操作:

右键–>Git Bash Here,执行命令git reflog可以查看到所有提交记录(以下图片例子子,不是当时情况) 执行git checkout a3593a8切换到最新的代码版本 执行git checkout -b diff //创建diff分支,并切换到该diff分支 执行git checkout mastergit merge dif... 在 Git 中,detached head 状态是指你的当前的 HEAD 指针指向的不是一个分支,而是一个单独的提交。这通常是因为你切换到了某个提交的历史记录上,或者是因为你在分支上 cherry-pick 了一个提交。 例如,当你使用 git checkout <commit> 命令时,你就会进入 detached head 状态。这是因为这个命令会将 HEAD 指针直接移动到给定的... 有时候,需要查看某个Tag中的代码,就会使用git checkout tag-name,切换到tag中。 此时,如果使用git status来查看当前的状态时,会报detached HEAD的提示。 detached HEAD表示当前的HEAD指向了一个具体的commit id,并没有处于任何分支。 将HEAD切回任意分支即可 $ git checkout master ...... 三、解决办法 You are in 'detached HEAD' state, which means that you're not on any branch Checkout a branch to make update possible. 一、背景描述 使用 IDEA编译器 更新项目时,居然更新不成功,报错内容如下: Can't Update:No Current Branch You are in 'detached HEAD' state, 不少开发者可能遇到过这个问题:从git上拉取服务端代码,然后只修改了一处地方,准备提交时,用diff软件查看,却发现整个文件都被修改了。这是git自动转换换行符导致的问题 不同操作系统使用的换行符是不一样的。Unix/Linux使用的是LF,Mac后期也采用了LF,但Windows一直使用CRLF【回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)】作为换行符。而git入库的代码采用的是LF格式,它考虑到了跨平台协作的场景,提供了“换行符自动转换”的功能:如果在Windows下安装git,在拉取文件时,会自动将LF换行符替换为CRLF;在提交时,又会将C Note: checking out 'v2.0.2'. You are in 'detached HEAD' state. You can look around, make experimental chang detached head是一种HEAD指针指向了某一个具体的 commit id,而不是分支的情况。在这个状态下进行的commit不会对你的远程分支产生影响。先看看detached head状态下是什么情况: 1.从远程库clone下来一个远程的repository: 2. clone下来之后,git自动在本地建立了一个本地分支master,并自动与远程库master关联。此时指