Git detached head的解決方法

detached head是一種HEAD指針指向了某一個具體的 commit id,而不是分支的情況。在這個狀態下進行的commit不會對你的遠程分支產生影響。先看看detached head狀態下是什麼情況:

1.從遠程庫clone下來一個遠程的repository:


2. clone下來之後,git自動在本地建立了一個本地分支master,並自動與遠程庫master關聯。此時指針指向的是一個master副本的本地分支。這個分支的內容和遠程庫master一致,代表你本機本地的副本。紅色部分爲遠程分支。你在本地的分支操作(add,commit),然後push到遠程的master中進行更新,遠程master的更新也通過pull 與你本地的合併,以此來保持同步。


3.現在checkout到Campus_MD分支。因爲本地的工作區目前是master分支的代碼,checkout一下就會出現detached head的狀態。在之前clone下來時,本地系統自動幫你創建了一個本地master分支與遠程master關聯。但是此次直接checkout Campus_MD分支時,本機上沒有本地分支與之關聯,就出現了detached head的情況(直接指向了commit id),所以據此猜測,應該有checkout的參數,使在checkout切換到遠程分支時,自動創建一個本地分支與之對應。


就這個理解的話,那麼此時只需手動在本地新建一個分支與你想要工作的分支進行關聯,就會在你的工作區正常的出現 目錄【分支名 ~0 ~0 ~0】這樣的正常提示了。

你看,git也是這麼提示的

。因爲你checkout的是一個遠程分支而不是本地的(因爲git是一個離線的版本控制系統嘛),git只能給你一個commit id讓你進行操作。這時候想正常操作,git就提示你 在此commit id的基礎上新建一個分支並 與之關聯(set-upstream)。就行了。


以前懵懂時候的操作,沒有遇到detached head。clone下來之後,直接git checkout branchName ,系統就自動創建了一個新的分支,當時以爲這就切換到了對應的遠程分支上工作。雖然操作是正確的,但是一直沒有明白其中的道理,以至於在checkout一個 origin/branchName的時候 遇到detached head就不知所措了。


好了,這算是最近遇到的一個git問題了,它並不是一個新問題,只是當初學習的時候一知半解留下的技術債務。

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