(六) 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 . ~~~ 取消所有本地的修改(相对于暂存区),相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认机会。
';