Git 之 checkout 命令解析

    我们知道reset命令会修改master引用的内容,使其指向任意一次提交,从而可以穿梭与代码提交的时空中。。。那么checkout会有什么奥秘呢?

一、用法

  1.  git checkout [-q] [<commit>] [--] <path>....

  2.  git checkout [<branch>]   

  3. git checkout [-m] [[-b] --orphan] <new_branch>] [<start_point>]


    其中第一种与第二种用法的区别是<path> , 可在path前加--以防与commit ID冲突。

    第一种commit可选,如果省略则为从暂存区检出,这与reset不同,reset默认从HEAD重置,而检出默认是暂存区。

    因此重置一般用于重置暂存区(加上--hard参数,也会重置工作区),而检出命令一般用于覆盖工作区,(如果commit不省略也可覆盖暂存区)。

    第一种用法,包含了<path>不会改变HEAD头指针。主要用于使用指定版本的文件覆盖工作区,如果省略commit,则用暂存区覆盖工作区。

    第二种用法,不使用<path>,会改变HEAD头指针。后面加<branch>参数,用于切换分支,否则会进入“分离头指针”状态。

    第三种用法,主要用于创建和切换到新分支上<new_branch>, 新的分支从<start_point>提交开始创建,分支就是refs/heads命名空间下的引用,跟master没有什么区别,都指向某次提交。


二、解析

Git 之 checkout 命令解析_第1张图片

Git 之 checkout 命令解析_第2张图片

三、参考

    图片来源:机械工业出版社,蒋鑫 《Git权威指南》

你可能感兴趣的:(git)