(六) Git检出
最后更新于:2022-04-01 19:53:40
#### 检出命令
此命令会重写工作区
该命令的实质就是修改HEAD本身的指向,不会影响分支游标。当执行此命令时,HEAD头指针被更改了,由指向一个引用(分支)变成了指向一个提交ID,分支(master)的指向没有改变,仍旧指向原有的提交ID
“分离头指针”状态:指的是HEAD头指针指向了一个具体的提交ID
用法一:git checkout [-q] [] [--] ... 为避免路径和引用(或提交ID)同名而发生冲突,可以在前用--作为分隔
此用法不会改变HEAD头指针,主要用于指定版本的文件覆盖工作区中对应的文件。若省略,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中对应的文件。
用法二:git checkout []
此用法会改变HEAD头指针,之所以后面的参数写作,是因为只有HEAD切换到一个分支才可以对提交进行跟踪,否则仍然会进入“分离头指针”的状态,此状态下提交不能被引用关联到,从而可能丢失。所以此用法最主要的作用就是切换到分支,若省略则相当于对工作区进行状态检查。
用法三:git checkout [-m] [[-b | orphan] ] []
此用法主要是创建和切换到新的分支,新的分支从指定的提交开始创建。新分支与master分支没什么实质的不同,都是在refs/heads命名空间下的引用。
~~~
$ git checkout branch
~~~
检出branch分支,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区。
~~~
$ git checkout 、 $ git checkout HEAD
~~~
汇总显示工作区、暂存区与HEAD的差异
~~~
$ git checkout -- filename
~~~
用暂存区中filename文件覆盖工作区中的filename文件,相当于取消自上次执行git add filename以来(如果执行过)的本地修改(会悄无声息覆盖)
~~~
$ git checkout branch -- filename
~~~
维持HEAD的指向不变,用branch所指向的提交中的filename替换暂存区和工作区中相应的文件,会将暂存区和工作区中的filename文件直接覆盖
~~~
$ git checkout -- 或 $ git checkout .
~~~
取消所有本地的修改(相对于暂存区),相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认机会。
';