git checkout

git checkout 命令用于更新工作区的文件使它们和指定提交或暂存区保持一致,也就是会从指定提交(或者暂存区)中拷贝文件到工作区替换掉原有的文件,也可用于切换分支(切换分支的同时也会更新工作区和暂存区的文件)。

更新文件

更新工作区的指定文件,使它和暂存区保持一致:

git checkout -- <file>

这个命令也就是撤销工作区对文件的修改。
-- 选项的作用是表明其后的内容是目录或文件,而不是分支名,避免有文件名和分支名一样而出错的情况,因为 git checkout 后面直接加分支名就成了切换分支了,在保证不会混淆的情况下,可以直接使用以下命令:

git checkout <file>

同时更新工作区和暂存区的指定文件,使它和指定提交保持一致:

git checkout <commit> <file>

比如将提交设为 HEAD:

git checkout HEAD <file>

这个命令更新工作区和暂存区的指定文件,使它和当前提交保持一致,也就是会把工作区和暂存区中对该文件的修改全部撤销,恢复到上一次 git commit 后的状态。

  • 上面命令中的 file 不一定只是一个确定的文件名,也可以是目录,还可以是匹配多个文件名的模式,比如 *.py 匹配所有以 .py 结尾的文件。

进一步,有以下两种用法:

(1)更新当前目录(和子目录)的所有文件,使它们和暂存区保持一致:

git checkout .

也就是撤销当前目录中的所有修改,包括删除的文件,但是未跟踪的文件不受影响。

(2)更新当前目录(和子目录)和对应的暂存区的所有文件,使它们和当前提交保持一致:

git checkout HEAD .

也就是撤销当前目录和对应暂存区中的所有修改,同样未跟踪文件不受影响。

  • 上面这两个命令只是针对执行命令时所处的目录起作用,因为 .(句点)在 shell 中代表当前目录,比如在工作区子目录下执行这两个命令,就只会对这个子目录(和子目录的子目录)起作用,并不会影响到工作区的其它文件。
  • 注意以上更新文件的命令都不会切换分支。

切换分支

如果给 git checkout 命令指定分支名作为参数,那么就可以用来切换分支:

git checkout <branch>

这个命令切换到指定分支,并将暂存区和工作区的文件更新到和该分支的最新提交一致,但是如果当前工作区或暂存区还有修改没有提交,那么这个命令会失败。

  • 切换分支后 HEAD 将指向对应的分支名,而该分支名指向它的最新提交(分支名实际上是一个指向它的最新提交的指针)

使用以下命令创建分支的同时切换到该分支:

git checkout -b <branch> [<start-point>]
或:
git checkout -B <branch> [<start-point>]

可以指定新分支基于哪一个提交 start-point 建立。
-B 选项的特殊之处在于如果要创建的分支已经存在,那么会把该分支重置到指定的 start-point 上,而 -b 选项则无法创建,会提示分支已经存在。

使用以下命令在当前提交新建分支,并设置跟踪指定的远程分支。

git checkout -b <branch> --track <remote>/<branch>

分离头模式

如果不给 git checkout 命令指定分支名,而是指定提交的校验和、标签名或者 master^ 形式的提交历史作为参数,那么就会进入分离头模式,此时 HEAD 与分支分离了(日常工作中 HEAD 总是指向某个分支),直接指向了提交,在这种情况下,提交新内容会产生问题,因为新提交不会更新分支,这个新提交就只能通过校验和来访问,一旦切换到其它分支,基本就找不到这个新提交了。为避免产生这样的问题,可以基于某个提交创建新分支然后切换过去进行工作:

git checkout -b <branch> [<start-point>]

不过,这种模式可以快速的切换到历史版本,可以方便的基于历史版本进行编译、安装软件,如果不需要进行提交,那么这是一种方便的工作方式。

git checkout 命令相关推荐

  1. git checkout 命令详解—— Git 学习笔记 16

    git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...

  2. git checkout 命令详解

    转自:http://www.cnblogs.com/hutaoer/archive/2013/05/07/git_checkout.html?utm_source=tuicool&utm_me ...

  3. 使用git checkout命令切换到指定的commit

    git checkout命令有很多种用法. git checkout + 分支名,切换到指定的分支. 比如git checkout develop: 切换之后,HEAD文件的内容: ref: refs ...

  4. git checkout 命令图文详解

    git checkout 命令图文详解 git checkout branchname (切换本地分支) 切换远程分支 放弃修改 git checkout . git checkout -- file ...

  5. Git(8)-- 撤消操作(git commit --amend、git reset 和 git checkout 命令详解)

    文章目录 1.撤消操作:`git commit --amend` 实例详解: 2.取消暂存的文件:`git reset` 3.撤消对文件的修改:`git checkout` 超详细 Git 图文版小白 ...

  6. git checkout 命令所有参数用法详解

    阅读这篇文章你将得到什么? git 命令的帮助文档获取 git checkout 命令系统知识详解,所有参数哟 怎么系统学习一个git 命令 根据git 的帮助一步步的撸下去,这样够全吧 获取参考手册 ...

  7. git基础教程(11) git checkout命令,掌握这些足以

    文章目录 概览 用法一 用法二 用法三 详细说明 1. `git checkout [<commit>] [--] <paths>` 2. `git checkout < ...

  8. git如何查看缓存区文件内容_详解Git工作区、暂存区、历史记录区以及git reset、git revert、git checkout等撤销命令的区别...

    一.可以将git简单的分为三个区域   1.工作区(working directory)    2.暂缓区(stage index)    3.历史记录区(history)    如图: 其中git ...

  9. git的一些简单命令(git clone,git branch,git checkout。。。)

    1.git clone 命令 $ git clone <版本库的网址> 比如,克隆jQuery的版本库. $ git clone https://github.com/jquery/jqu ...

最新文章

  1. 十四、Canny边缘提取
  2. k8s dashboard_k8s集群部署Dashboard
  3. Android JSON数据与实体类之间的相互转化-------GSON的简单用法
  4. Python程序员晒追女神聊天截图,坦言第一次没经验,网友直呼凭实力单身
  5. Centos 编译安装mysql 5.6.21
  6. 在IDEA中编辑struts国际化properties文件
  7. 计算机拼音字体大小设置,拼音字体
  8. java导出mysql数据表的结构生成word文档
  9. 使用Pytorch识别字符验证码
  10. “匠心之韵,数据之美”之InfoQ专访COO叶谦:解读全域大数据战略背后的技术演进...
  11. Frequent Itemset Mining 频繁项集查找
  12. 网络隔离环境下的跨网数据传输,如何保障安全性?
  13. VB/VBA,请让我点名表扬你
  14. Cocos Creator 位图字体(艺术数字资源、BMFont、自定义位图字体、插件)
  15. python如何将excel非首行作为dataframe的列名
  16. 利用Matlab进行图像变换(傅里叶变换、余弦变换)
  17. HtmlAgilityPack.dll爬虫获取百度音乐批量下载地址(C#源码)
  18. SCAU华南农业大学-数电实验-可找零的自动售货机-实验报告
  19. 【Linux】静态库与共享库
  20. GIS之路,松柏苍青

热门文章

  1. VSAN 6.1九大特性
  2. Linux入门(四)-用户管理
  3. refind linux内核参数,使用rEFInd实现OpenWRT / LEDE支持UEFI GPT启动
  4. 如何批量修改文件后缀名(包含该路径下的所有文件夹)
  5. 大龄码农是如何把自己逼死的
  6. 0011 难以取悦的姑娘
  7. C++中的sizeof函数
  8. React Native flex布局alignItems、alignContent、alignSelf的区别
  9. C++之RapidJSON解析json数据
  10. a标签超链接时跳转到新窗口