1.HEAD基础 git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch。 HEAD文件指向的branch就是当前branch. 一般来讲,HEAD的内容是指向staging(暂存区)的master文件的。
当然也可指向其他索引文件,不管怎么样,这个索引文件的内容又由git reset控制。 通过git branch命令看到的结果和HEAD文件内容一致。
- $ git branch -v
- * master 1aea8d9 [ahead 1] add test file x
2.最简单用法 git checkout最简单的用法,显示工作区,暂存区和HEAD的差异:
- $ git checkout
- M x
- Your branch is ahead of 'origin/master' by 1 commit.
意思是我本地仓库比远程仓库领先一个提交操作。git checkout HEAD 功能相同。 如果用-a 参数,可以看到很多branch,包括远程的branch,比如:
- git branch -a
- * master
- remotes/origin/HEAD -> origin/master
- remotes/origin/develop
- remotes/origin/issue_193
- remotes/origin/issue_210
- remotes/origin/master
3.detached HEAD 如果让HEAD文件指向一个commit id,那就变成了detached HEAD。git checkout 可以达到这个效果,用下面的命令:
laea8d9是最近的一次commit id,^指的是之前一次,因此上面的操作结果是让HEAD文件包含了倒数第二次提交的id. 下面演示如何进入datached HEAD状态,并恢复回来。
- $ git branch -v
- * master 89f8dae [ahead 2] update x
- $ git checkout 89f8dae^
- Note: checking out '89f8dae^'.
-
- You are in 'detached HEAD' state. You can look around, make experimental
- changes and commit them, and you can discard any commits you make in this
- state without impacting any branches by performing another checkout.
-
- If you want to create a new branch to retain commits you create, you may
- do so (now or later) by using -b with the checkout command again. Example:
-
- git checkout -b new_branch_name
-
- HEAD is now at 1aea8d9... add test file x
好,现在恢复回来。
- $ git checkout master
- Previous HEAD position was 1aea8d9... add test file x
- Switched to branch 'master'
- Your branch is ahead of 'origin/master' by 2 commits.
我并不清楚detached HEAD有何实际用处,反正就是一个让HEAD随便指向某个commit id,而不在乎是哪个branch的功能。
http://blog.csdn.net/csfreebird/article/details/7583363
谢谢!!!
|