git問題記錄--如何從從detached HEAD狀態解救出來

http://www.jianshu.com/p/ae4857d2f868


今天使用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命令大全,非常實用

9.jpg


作者:饅頭MT
鏈接:http://www.jianshu.com/p/ae4857d2f868
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章