天天看點

git detached HEAD解決方案(親測)

原理: 利用 遊離狀态 的那個 版本号建立一個新的分支, git  branch xxx 遊離版本的版本号。這時,這個新創新的分支的代碼就是我們 這個版本号中的代碼了。在切換分支到主分支master:git checkout master  .。最後 把新建立的那個分支融合到我麼你的主分支上,這樣遊離狀态的代碼就融合到我們主分支上了。遊離狀态也解除了。

遊離狀态 本質上是  本地的HEAD 指向了一個 未知的分支,HEAD不會指向任何分支,嚴謹的說是HEAD指向了一個沒有分支名字的修訂版本,此時恭喜你,已經處于遊離狀态了。

操作如下:

今天使用git的時候在終端發現這樣一條資訊

HEAD detached at head

分析

心裡一驚,艾瑪這是什麼狀态?

其實我們知道,

git checkout

本質上是修改HEAD裡面的内容來讓它指向不同分支的,而HEAD檔案指向的分支就是我們目前的分支,但是有時候HEAD不會指向任何分支,嚴謹的說是HEAD指向了一個沒有分支名字的修訂版本,此時恭喜你,已經處于遊離狀态了(detached HEAD).這時候我們在進行commit操作不會送出到任何分支上去.

這個時候輸入

git status

檢視目前狀态發現我沒有在任何本地分支上也驗證了剛才的猜想,而這時候我又作死的進行了commit操作,git提示我

Warning: you are leaving  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 detached HEAD解決方案(親測)