今天從遠端clone一個專案下來,然後用git checkout
從origin/master
切到另一條遠端分支origin/dev
。
$ git checkout origin/dev
此時輸入git status
時,出現HEAD detached at origin/dev
的訊息。
$ git status
HEAD detached at origin/master
nothing to commit, working tree clean
原因是因為當HEAD
並沒有指向任何本地分支(local branch)時即為HEAD detached狀態,而我在上面的操作是直接把HEAD
指向遠端分支origin/dev
,而HEAD
並沒有指向任何本地分支。
解決的方式是用git branch --track
指令建立一條本地分支dev並使其追蹤遠端分支origin/dev
。
$ git branch --track dev origin/dev
此時雖然建立了追蹤遠端分支origin/dev
的本地分支dev
,但此時HEAD
仍是指向遠端分支origin/dev
而非本地分支dev
,依舊是HEAD detached狀態。
因此接著要把HEAD
指向本地分支dev
,使用git checkout
指令切換到dev
。
$ git checkout dev
一旦HEAD
有了指向的本地分支後,HEAD detached at origin/dev
的狀態就會消失了。
要避免這個問題,一開始在checkout remote branch時,應該改用git checkout -t <remote_branch>
指令,如此便會自動建立一個與遠端同名的本地分支,並以此本地分支追蹤遠端分支。例如剛剛checkout origin/dev遠端分支應改成如下:
$ git checkout -t origin/dev
這樣就會自動一個本地分支dev
,並以此追蹤遠端分支origin/dev
。
參考:
沒有留言:
張貼留言