git checkout的使用
2014-01-04 18:27
399 查看
HEAD可以理解为“头指针”,表示当前工作区的“基础版本”,当执行提交的时候,Head的指向将作为新提交的父提交。
下面的操作就叫做git的检出
分离头指针状态(detached HEAD state)就是说HEAD指向的是一个具体的提交,而不是一个引用(分支)。
此时查看reflog即可发现HEAD由指向master分支变为指向一个一个提交ID
checkout与reset不同,master并没有改变。
下面测试在“断头模式”下的提交
首先checkout到一个提交,然后新建一个文件,add然后commit。这时我们可以在日志里面看到提交信息。
在提交中也会提示你现在处于“断头模式”。这时日志中出现我们刚刚的提交。
然后我们checkout到master分支
再次查看日志我们发现刚才的提交已经没了,而且在工作区中文件也消失了。
虽然使用show命令还可以查看,但是git不知道什么时间就会把他彻底的从历史中抹去。
如果要挽救这个提交可以使用merge命令
merge命令就是把某个分支合并到当前分支,这是我们可以看到日志和工作区都出现了那次提交。
同时,在76fb上出现了开发分支
我们看到这一次的提交出现了两个父提交
git checkout -- filename命令可以用暂存区里面的filename文件来覆盖工作区中的的filename文件。
9fce
$ git branch -v # 查看当前在那个分支
下面的操作就叫做git的检出
$ git checkout 76fb M README.md Note: checking out '76fb'. 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 76fb938... add Bye.xtx
分离头指针状态(detached HEAD state)就是说HEAD指向的是一个具体的提交,而不是一个引用(分支)。
此时查看reflog即可发现HEAD由指向master分支变为指向一个一个提交ID
$ git reflog --oneline -1 76fb938 HEAD@{0}: checkout: moving from master to 76fb
checkout与reset不同,master并没有改变。
下面测试在“断头模式”下的提交
$ git checkout 7945 M README.md Note: checking out '7945'. 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 79452f4... add Hi
首先checkout到一个提交,然后新建一个文件,add然后commit。这时我们可以在日志里面看到提交信息。
GS@GS-PC /d/Workspaces/GitHubRepository/GitStudy ((79452f4...)) $ git commit -m "commit in detached HEAD" [detached HEAD d4406c9] commit in detached HEAD 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 detachedHEAD.txt
在提交中也会提示你现在处于“断头模式”。这时日志中出现我们刚刚的提交。
GS@GS-PC /d/Workspaces/GitHubRepository/GitStudy ((d4406c9...)) $ git log --oneline d4406c9 commit in detached HEAD #最新的提交 79452f4 add Hi 74d5a3d First Comm 2307227 Merge https://github.com/gsh199449/GitStudy 43b9c5e First Commit e8493e4 First 6754302 Initial commit
然后我们checkout到master分支
GS@GS-PC /d/Workspaces/GitHubRepository/GitStudy ((d4406c9...)) $ git checkout master M README.md Warning: you are leaving 1 commit behind, not connected to any of your branches: #在这里我们看到这个提交没有在连接到任何分支上面 d4406c9 commit in detached HEAD If you want to keep them by creating a new branch, this may be a good time to do so with: git branch new_branch_name d4406c9 Switched to branch 'master' Your branch is behind 'GitStudy/master' by 6 commits, and can be fast-forwarded. (use "git pull" to update your local branch)
再次查看日志我们发现刚才的提交已经没了,而且在工作区中文件也消失了。
GS@GS-PC /d/Workspaces/GitHubRepository/GitStudy (master) $ git log --oneline 76fb938 add Bye.xtx 79452f4 add Hi 74d5a3d First Comm 2307227 Merge https://github.com/gsh199449/GitStudy 43b9c5e First Commit e8493e4 First 6754302 Initial commit
虽然使用show命令还可以查看,但是git不知道什么时间就会把他彻底的从历史中抹去。
$ git show d4406 commit d4406c941f7d154e0fe87afc41e3e578d2303733 Author: gsh199449 <gsh199449@hotmail.com> Date: Fri Nov 29 12:37:48 2013 +0800 commit in detached HEAD diff --git a/detachedHEAD.txt b/detachedHEAD.txt new file mode 100644 index 0000000..e69de29
如果要挽救这个提交可以使用merge命令
$ git merge d4406 Merge made by the 'recursive' strategy. detachedHEAD.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 detachedHEAD.txt
merge命令就是把某个分支合并到当前分支,这是我们可以看到日志和工作区都出现了那次提交。
$ git log --oneline 3f6488e Merge commit 'd4406' d4406c9 commit in detached HEAD 76fb938 add Bye.xtx 79452f4 add Hi 74d5a3d First Comm 2307227 Merge https://github.com/gsh199449/GitStudy 43b9c5e First Commit e8493e4 First 6754302 Initial commit
同时,在76fb上出现了开发分支
$ git log --graph --oneline * 3f6488e Merge commit 'd4406' |\ | * d4406c9 commit in detached HEAD * | 76fb938 add Bye.xtx |/ * 79452f4 add Hi
我们看到这一次的提交出现了两个父提交
$ git cat-file -p HEAD tree d42b037f806ee5afd2265c94e0fe15f6cb4578c6 parent 76fb93819096c6f7c182218eeaeb18b2ad275b48 parent d4406c941f7d154e0fe87afc41e3e578d2303733 author gsh199449 <gsh199449@hotmail.com> 1385700536 +0800 committer gsh199449 <gsh199449@hotmail.com> 1385700536 +0800 Merge commit 'd4406'
git checkout -- filename命令可以用暂存区里面的filename文件来覆盖工作区中的的filename文件。
9fce
相关文章推荐
- oracle查看相关用户表
- package-info.java文件作用
- retain和release倒底怎么玩?
- Objective-C NSPredicate
- 解决中文随机读取的乱码问题
- 改变eclipse字体、背景颜色
- snmp oid I/O监测
- 2014,大家好
- 矩阵论 第三章 矩阵的广义逆与线性方程组
- 体验云编程——IOS脚本学习门户
- 系统设计 - 软件构件技术
- uva 10721 Bar Codes (DP)
- nodejs的安装
- 《精通PKI网络安全认证技术与编程实现》 读书笔记二
- 本土回忆! 即使你走的再远,也不能忘了让你生长的老家文化~
- 数据结构 - 图
- vmclone 问题
- C#判断文件格式
- OpenGL Perspective Projection Matrix
- C++调用C函数