今天公司更新代碼的時候提示Git HEAD detached...,好久沒有遇到過了。
HEAD,就是頭指針,紙箱目前當前分支的最新提交。當使用git checkout 分支名的時候會指到到相應的分支。

git checkout.jpg
有一種情況,就是使用了git checkout commitid。
這時候會導致新建了一個匿名分支,這時候提交代碼commit之后,如果直接切其他分支,剛才提交的代碼會全部丟失??!具體解決方法有兩個:
1、git stash 儲存起來然后切回主分支,再git stash pop彈出,解沖突。
2、創(chuàng)建臨時分支,切回主分支,merge解沖突。
實例場景演示
創(chuàng)建一些提交,如下,目前分支為master分支。

init.png
1、某一天要會看某次提交之后代碼,為了方便就直接git checkout commitid

git checkout commitid.jpg
2、之后忘記了這件事,那天下午直接在上面改代碼,改完git status看了一下發(fā)現(xiàn)這個提示。

head detached.jpg
這時候如果直接git add、git commit,然后git checkout master就會導致修改的代碼全部沒掉(當然,如果沒有修改直接git checkout master就行)??梢酝ㄟ^git branch看見目前在一個匿名分支當中。

匿名分支.jpg
此時,正確的做法有兩種:
方法1、通過git stash,如果有沖突解沖突,解完add、commit即可。
git stash
git checkout master
git stash pop

方法1.jpg
方法2、創(chuàng)建一個臨時分支并提交,然后切回主分支merge,如果有沖突還是解重復圖然后add commit即可,最后刪除臨時分支。
git checkout -b temp
git add .
git commit
git checkout master
git merge temp
解沖突然后add commit
git branch -d temp

方法2.jpg