git学习笔记(六)--git的检出
主要学习一下git 关于checkout的命令
- 需要明白的一个事情,在没有创建分支以前,头指针HEAD指向的是一个引用,也就是.git/refs/heads/master,因此所有的reset命令都是针对master这条线设置的。
- HEAD可以理解为当前工作区的基础版本,当前的工作内容都是在上一次commit之后做的,但是HEAD并不是总指向master,可以指向其他的分支,或者某个提交的ID。
- checkout这个命令,顾名思义,就是从版本库里取东西out出来,因此执行checkout有可能会更改HEAD,当然是checkout别的分支的提交ID
- .git/refs/heads这个目录下存放的就是不同分支的引用!
- 上一节提到的一个重要命令 git reflog show master是用来显示master这条分支的记录,如果直接git reflog就显示的是HEAD的变迁记录!
分离头指针状态:
当HEAD指向一个具体提交的ID,而不是一个分支的引用的时候,就会发生"detached HEAD mode".在这种mode下,再进行修改而所做的提交,将不会有分支追踪到,因此变成了孤立的提交,当reflog含有该提交的日志过期后,这个提交将被彻底清除。因此,切换HEAD最好在分支引用之间!
如何处理"detached HEAD mode"?
(1)可以直接切换回某个分支,而不管哪个孤立提交,让其自生自灭;
(2)如果那个提交有用,可以使用merge合并,把它并到某个分支中,命令如下:
git branch master
git merge 该提交ID
而且这个提交会有两个父提交,一个是那个孤立提交,一个是分支的当前提交
git checkout命令的用法介绍:
git checkout branch //取出(检出)branch分支,执行3个动作,HEAD切换到该分支引用,使用该分支引用的目录树中的对象更新暂存区和工作区。
git checkout //显示当前工作区、暂存区与HEAD的差异
git checkout -- filename //用暂存区文件覆盖工作区文件
git checkout branch -- filename //HEAD指向不变,但把branch分支所指向提交中的filename拿来替换暂存区和工作区
git checkout . //相当于git add .的反动作,取消暂存区的所有add内容
总结:
1.明白分离头指针的意思
2.重点几条命令:
git branch //查看当前的分支
git checkout ID //检出某个提交,进入分离头指针状态
git reflog show //查看HEAD的变迁记录
git checkout branch //切换到branch分支,实际上是切换到branch分支的最后一个提交状态
浙公网安备 33010602011771号