Git "detached HEAD" state 详解

2,121 阅读1分钟
原文链接: www.36nu.com

"detached HEAD" state——HEAD头指针指向了一个具体的提交ID,而不是一个分支,例如:

假如有一次commit的id为f6c962c5

# git checkout f6c962c5

或者直接checkout到一个远程分支

# git checkout origin/master

如果在此状态做了一些修改,例如我新添加了一个文件1.txt:

# echo 1>1.txt
# git add 1.txt
# git commit -am 'add 1.txt'

因为现在不在任何分支,如果想在master分支使用在此状态下做的修改,可以按照以下步骤操作:

# git checkout master
# git cherry-pick f6c962c5

或者直接push到远程分支:

# git push origin HEAD:

例如push到远程master分支:

# git push origin HEAD:master

这种情况可以在修复bug时使用,当有bug时,一般做法是切个分支修复完bug然后合并回主分支,这种做法的缺点是需要新建一个分支,如果使用"detached HEAD" state,只需切到要修复bug的commit的id,修改完成commit之后切回主分支cherry-pick过来就好了。

举个例子:

假如在master发下有个bug,最新commit的id为f6c962c5,要修复bug可以这么做:

# git checkout f6c962c5

bug修复完成后

# git commit -am '修复bug'
# git checkout master
# git cherry-pick f6c962c5