前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git学习之旅 - 深入了解git checkout命令

Git学习之旅 - 深入了解git checkout命令

原创
作者头像
知忆
修改2021-06-23 10:10:21
1.3K0
修改2021-06-23 10:10:21
举报
文章被收录于专栏:linux百科小宇宙linux百科小宇宙

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

用法一:git checkout[-q][<commit>][--]<paths>……

用法二:git checkout[<branch>]

用法三:git checkout[-m][[-b|--orphan]<new_branch>][<start_point>]

上面列出的第一种用法和第二种用法的区别在于,第一种用法在命令中包含路径<paths>。为了避免路径和引用(或者提交ID)同名而发生冲突,可以在<paths>前用两个连续的短线(减号)作为分隔。

第一种用法的<commit>是可选项,如果省略则相当于从暂存区(index)进行检出。这和上一章的重置命令大不相同:重置的默认值是HEAD,而检出的默认值是暂存区。因此重置一般用于重置暂存区(除非使用--hard参数,否则不重置工作区),而检出命令主要是覆盖工作区(如果<commit>不省略,也会替换暂存区中相应的文件)。

第一种用法(包含了路径<paths>的用法)不会改变HEAD头指针,主要是用于指定版本的文件覆盖工作区中对应的文件。如果省略<commit>,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中对应的文件。

第二种用法(不使用路径<paths>的用法)则会改变HEAD头指针。之所以后面的参数写作<branch>,是因为只有HEAD切换到一个分支才可以对提交进行跟踪,否则仍然会进入“分离头指针”的状态。在“分离头指针”状态下的提交不能被引用关联到,从而可能丢失。所以用法二最主要的作用就是切换到分支。如果省略<branch>则相当于对工作区进行状态检查。

第三种用法主要是创建和切换到新的分支(),新的分支从指定的提交开始创建。新分支和我们熟悉的master分支没有什么实质的不同,都是在refs/heads命名空间下的引用。关于分支和git checkout命令的这个用法会在具体介绍。

如下所示的版本库模型图描述了git checkout实际完成的操作。

下面通过一些示例来具体看一下检出命令的不同用法。

命令:git checkout branch

    检出branch分支。要完成上图中的三个步骤,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区。

命令:git checkout

    汇总显示工作区,暂存区与HEAD的差异。

命令:git checkout HEAD

    同上

命令:git checkout -- filename

    用暂存区中filename文件来覆盖工作区中的filename文件。相当于取消自上次执行git add filename以来的本地修改。

    这个命令很危险,因为对于本地的修改会悄无声息地覆盖,毫不留情。

命令:git checkout branch -- filename

    维持HEAD的指向不变。用branch所指向的提交中的filename替换暂存区和工作区中相应的文件。注意会将暂存区和工作区中的filename文件直接覆盖。

命令:git checkout -- . 或写作 git checkout .

    注意 git checkout 命令后的参数为一个点(".")。这条命令最危险!会取消所有本地的修改(相对于暂存区)。相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认的机会!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档