Git 中的 HEAD 可以理解為一個指針,我們可以在命令行中輸入 cat .git/HEAD 查看當前 HEAD 指向哪兒,一般它指向當前工作目錄所在分支的最新提交。
cat .git/HEAD ref: refs/heads/<branch name> // 正常 cad0be9ceb89f474c39360c4de337d4a8194cab0 // 游離狀態
使用git checkout 來移動HEAD指針,移動的對象可以是分支指針也可以是快照。
HEAD指針可以指向快照也可以指向branch。當指向branch時提交后會和branch指針一起向后移動,當不指向branch提交時時則會在一個detached狀態。
當使用 git checkout < branch_name> 切換分支時,HEAD 會移動到指定分支。
git checkout <branch name>
但是如果使用的是 git checkout <commit id>,即切換到指定的某一次提交,HEAD 就會處於 detached 狀態(游離狀態)

git checkout <commit id>
HEAD 游離狀態的利與弊
利: 我們可以很方便地在歷史版本之間互相切換,比如需要回到某次提交,直接 checkout 對應的 commit id 或者 tag 名即可。
弊:在這個基礎上的提交會新開一個匿名分支且提交是無法可見保存的,一旦切到別的分支,游離狀態以后的提交就不可追溯了。
git branch
* (HEAD detached at 925fda6)
master

解決辦法
1,查看當前分支狀態
git branch
* (HEAD detached at 925fda6)
master
2,新建一個臨時 tem 分支,把當前提交的代碼放到整個分支
git branch tem //tem是新建分支的名字
git checkout tem
3,換回要回到的那個分支,這里是 master
git checkout master
4,然后 merge 剛才創建的臨時分支
git merge tem
Updating cad0be9..2437c6b
Fast-forward
......
5,檢查是否有沖突,沒有就提交到遠端
git push origin master
6,刪除臨時分支
git branch -d tem
作者:相忘於天涯
鏈接:https://www.jianshu.com/p/fdd3c2d020d7
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
# 新建分支
git branch imagebranch(分支名)
# 至本地項目路徑,即.git所在路徑,將本地倉庫代碼導入新分支
# 注意,此處需要輸入github用戶名、密碼
git push origin imagebranch
# 切換到該分支
git checkout imagebranch
# 校驗本地修改