git checkout之一 HEAD基本和detached 状态
http://blog.csdn.net/csfreebird/article/details/7583363
1.HEAD基础
git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch。
HEAD文件指向的branch就是当前branch.
一般来讲,HEAD的内容是指向staging(暂存区)的master文件的。
[plain] view plaincopyprint?
- ref: refs/heads/master
通过git branch命令看到的结果和HEAD文件内容一致。
[plain] view plaincopyprint?
- $ git branch -v
- * master 1aea8d9 [ahead 1] add test file x
2.最简单用法
git checkout最简单的用法,显示工作区,暂存区和HEAD的差异:
[plain] view plaincopyprint?
- $ git checkout
- M x
- Your branch is ahead of 'origin/master' by 1 commit.
如果用-a 参数,可以看到很多branch,包括远程的branch,比如:
[plain] view plaincopyprint?
- 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 可以达到这个效果,用下面的命令:
[plain] view plaincopyprint?
- git checkout 1aea8d9^
下面演示如何进入datached HEAD状态,并恢复回来。
[plain] view plaincopyprint?
- $ 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
[plain] view plaincopyprint?
- $ 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://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.
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
