http://blog.csdn.net/csfreebird/article/details/7583363
1.HEAD基础
git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch。
HEAD文件指向的branch就是当前branch.
一般来讲,HEAD的内容是指向staging(暂存区)的master文件的。
当然也可指向其他索引文件,不管怎么样,这个索引文件的内容又由git reset控制。
通过git branch命令看到的结果和HEAD文件内容一致。
2.最简单用法
git checkout最简单的用法,显示工作区,暂存区和HEAD的差异:
意思是我本地仓库比远程仓库领先一个提交操作。git checkout HEAD 功能相同。
如果用-a 参数,可以看到很多branch,包括远程的branch,比如:
3.detached HEAD
如果让HEAD文件指向一个commit id,那就变成了detached HEAD。git checkout 可以达到这个效果,用下面的命令:
laea8d9是最近的一次commit id,^指的是之前一次,因此上面的操作结果是让HEAD文件包含了倒数第二次提交的id.
下面演示如何进入datached HEAD状态,并恢复回来。
我并不清楚detached HEAD有何实际用处,反正就是一个让HEAD随便指向某个commit id,而不在乎是哪个branch的功能。
http://stackoverflow.com/questions/10228760/fix-a-git-detached-head
Detached head means you are no longer on a branch, you have checked out a single commit in the history (in this case the commit previous to HEAD, i.e. HEAD^).
You only need to checkout the branch you were on, e.g.
git checkout master
Next time you have changed a file and want to restore it to the state it is in the index, don't delete the file first, just do
git checkout -- path/to/foo
This will restore the file foo to the state it is in the index.