當你檢出直接提交域名(使用的commit對象的SHA-1散列)而不是檢查出來的一個分支的名字,你結束了一個「分離頭」。 HEAD是跟蹤當前檢出內容的「ref」。當你直接簽出一個提交而不是一個分支(它沒有連接到任何分支)時,它會變成分離的。分離存儲庫的HEAD時不會更新分支。你可能會想到分離的頭部狀態,就好像你有一個匿名分支簽出。
要重新安裝存儲庫的頭,你將要保存當前HEAD的分支和檢查分支出來:
要保存當前的頭一個新支做到這一點:
git branch <new-branch-name>
要覆蓋的現有分支,你需要使用--force
:
git branch --force <existing-branch-name>
然後,重新連接通過檢查新/更新的分支版本庫的HEAD:
git checkout <branch-name>
(其中<branch-name>
相同<new-branch-name>
或<existing-branch-name>
,這取決於上述兩個你使用的命令)
這個序列(git branch
做一個引用點到當前的HEAD提交,然後git checkout
更新的分支)將繼承您可能在工作索引和/或樹中的任何未提交的內容。
在未來,如果你想「回滾」當前分支此前的一些承諾,您應該使用這個,而不是卸下你的版本庫的HEAD:
git reset --hard <commit>
這將重置當前分支(或者你分離的HEAD,如果它已經分離)到指定的提交,並且使索引和工作樹反映該提交(即,它丟棄自指定的提交以及任何未提交的內容以來的任何提交)。
脫離的國家元首是重溫老態,有時對你是不知道你能不能讓短期的工作是有用的。除此之外,你可能想避免它。
謝謝,這將把工作樹變回分支? – Bob 2010-03-18 04:34:14
這是你最初應該做的事,但它不能解決你的情況。如果您的HEAD仍然分離,則不會將其重新附加到分支。請看我的答案。 – 2010-03-18 04:42:13
它會將您當前的頭重置爲指定的提交。所以你需要'git checkout master'(或者你想要回滾的任何分支),然後使用'git reset'命令。 – Chris 2010-03-18 04:42:44