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
.
那麼這時候我已經有了一個思路:
- 基於本次提交創建一個臨時分支.
- 然後merge到我當前工作分支.
- 刪除臨時分支
實操
基於本次提交創建臨時分支
輸入$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命令大全,非常實用
作者:饅頭MT
鏈接:http://www.jianshu.com/p/ae4857d2f868
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。