git学习笔记(六)--git的检出

主要学习一下git 关于checkout的命令


 

  1. 需要明白的一个事情,在没有创建分支以前,头指针HEAD指向的是一个引用,也就是.git/refs/heads/master,因此所有的reset命令都是针对master这条线设置的。
  2. HEAD可以理解为当前工作区的基础版本,当前的工作内容都是在上一次commit之后做的,但是HEAD并不是总指向master,可以指向其他的分支,或者某个提交的ID。
  3. checkout这个命令,顾名思义,就是从版本库里取东西out出来,因此执行checkout有可能会更改HEAD,当然是checkout别的分支的提交ID
  4. .git/refs/heads这个目录下存放的就是不同分支的引用!
  5. 上一节提到的一个重要命令 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分支的最后一个提交状态

  

posted on 2012-07-22 21:56  melburg  阅读(607)  评论(0)    收藏  举报