git checkout

检出命令(git checkout) 是git最常用的命令之一,同时也是个很危险的命令,因为这条命令会重写工作区:

  1. 用法一:git checkout [-q] [<commit>] [--] <paths>...
  2. 用法二:git checkout [<branch>]
  3. 用法三:git checkout [-m] [[-b|--orphan] <new_branch>] [<start_point>]
  • 上面列出的第一种用法和第二种用法的区别在于,第一种用法在命令中包含路径<paths>.为了避免路径和引用(或者提交id)同名而发生冲突,可以在<paths>前面用两个连续的短线(减号作为分割)
  • 第一种用法的<commit>是可选项,如果省略则相当于从暂存区进行检出(检出的默认值是暂存区)。
  • 第一种用法(包含了路径<paths>的用法)不会改变HEAD头指针,主要是用于指定版本的文件覆盖工作区中对应的文件。如果省略<commit>,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中对应的文件.
  • 第二种用法则会改变HEAD头指针,主要用作切换到分支,如果省略<branch>则相当于对工作区进行状态检查。
  • 第三种用法主要是创建和切换到新的分支(<new_branch>),新的分支从<start_point>指定的提交开始创建。新的分支和master分支没有什么实质的不同,都是在refs/heads命名空间下的引用。

 具体示例:

  • git checkout branch  检出branch分支,要完成上图的三个步骤,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区
  • git checkout  汇总显示工作区,暂存区与HEAD的差异
  • git checkout HEAD 同上
  • git checkout -- filename 用暂存区中filename文件来覆盖工作区中的filename文件。相当于git add filename的撤消,这个命令很危险,因为对于本地的修改会悄无声息的覆盖
  • git checkout -- .  或写作 git checkout .   注意命令后面有个点(.)  这条命令最危险,会取消所有本地的修改(相对于暂存区),相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认的机会!
  • git checkout HEAD . 或者 git checkout HEAD <file> , 注意命令后面有个点(.) ,会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区的文件,这个操作也很危险

猜你喜欢

转载自my.oschina.net/langgege/blog/1795567