Git存儲庫當前活動的分支是HEAD指向的分支。
在內部,HEAD只是一個文件,位於存儲庫的GIT_DIR(非裸倉庫的.git
目錄或裸存儲庫的頂部)的頂部。如果HEAD看起來像ref: refs/some/thing
,則它將被解釋爲指向名爲ref的symref(符號引用)(通常是refs/heads/
下的一個分支)。如果HEAD包含對象名稱(SHA-1)的40字節ASCII十六進制表示,那麼我們說它是一個「分離的HEAD」(因爲它不是「附加」到一個正常的分支),它的工作原理與正常的ref (即它像任何其他分支一樣工作)。
如你所想,git branch
將顯示當前在其之前帶有星號的活動分支。這在常規(非裸)和裸存儲庫中工作。
在常規(非裸)庫(那些具有工作樹)HEAD由git的結帳的正常使用自動維護:
git checkout other-branch
# HEAD is now a symref to refs/heads/other-branch
裸存儲庫(通常用在服務器上)沒有工作樹,所以git結賬將無法正常工作。要更新一個純倉庫的頭,你必須使用git symbolic-ref:
git symbolic-ref -m 'new default branch' HEAD refs/heads/other-branch
# HEAD is now a symref to refs/heads/other-branch
在你必須有到存儲庫中直接獲得更新HEAD改變當前活躍的分支兩種情況。像大多數託管服務提供商一樣,GitHub不提供對存儲庫的直接訪問。但是,它確實提供web interface that lets users change the HEAD of their repositories(他們將其稱爲「默認分支」)。
http://stackoverflow.com/questions/1485578/how-do-i-change-a-git-remote-head-to-point-to-something-besides-master有一些答案。 – VonC 2010-09-13 13:06:41