git checkout:从分支或者索引中检索文件到当前工作目录

摘要:git checkout命令帮助我们实现如下的功能:创建分支,切换分支,撤销对当前工作目录下某些文件的修改,在两个分支和当前工作目录之间进行三路合并。本文主要为你讲解了git checkout的原理和几种使用情景以及示例。


本文来源:git checkout:从分支或者索引中检索文件到当前工作目录

http://blog.csdn.net/trochiluses/article/details/14519303

1.命令说明


  git-checkout :检出一个分支或者路径到当前工作目录。

  git-checkout - Checkout a branch or paths to the working tree


2.命令语法


       git checkout [-q] [-f] [-m] [<branch>]
       git checkout [-q] [-f] [-m] [--detach] [<commit>]
       git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
       git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
       git checkout [-p|--patch] [<tree-ish>] [--] [<paths>...]


3.命令说明

3.1 -b选项

利用git checkout创建分支

注意,我们可以用git checkout -b创建一个分支,但是它仅仅是创建一个分支,并不会改变stage文件,也不会改变当前工作目录


3.2默认源文件和流程

git checkout 默认从index中检出文件到working dir.但是,需要注意,如果如果仅仅使用git reset 但是不指定文件名,那么git check将不进行任何操作。但是,这个操作会告诉你哪些文件发生了变化——但是并不会自动更改。我慢看一下git checkout的结果:

[huangyk@huangyk quickstart]$ git checkout
M lab.sh
M nat.sh

但是,git reset 就不同,如果不指定文件,将更改stage状态下的所有文件。

也就是说,git checkout的默认对象是空;git reset的默认对象是stage状态下的所有文件。从中我们可以看出,git对数据库和当前目录之下文件的保护更加严格


git checkout [<branch>], git checkout -b|-B <new_branch> [<start point>], git checkout [--detach] [<commit>]

注意:这种形式下,如果checkout的是一个新的分支,那么当前工作目录、索引都会被更新。

如果是当前分支,那么没有任何反应.

原理:命令会检查仓库和index是否一致,如果一致将不会继续进行后续操作。 所以,如果修改了某个文件,但是没有进入stage,此时我们反悔了,使用“git checkout”是没法达到目的的。


此时,可以使用如下的命令形式,从index中检出文件

git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>...


 更新当前工作目录下的文件,使得它与index或者指定tree-ish(某一个commmit)下的文件相匹配。如果没有指定文件路径,命令将会同时更新HEAD,即切换当前分支。注意,如果没有指定文件,git checkout并不会用index中的文件来更新当前工作目录下的文件。


git checkout -m如果在分支onebranch下面已经有修改,而且没有提交,那么是不能用git checkout来转换分支的,此时,我们如果用-m选项,那么就会产生三路归并的效果:当前工作目录、当前分支、想要checkout的分支。如果merge产生冲突,索引条目将不会被更新,此时你需要手动进行冲突处理。另外,如果是从index中检出,-m选项将让你在指定的路径之下重新产生冲突的合并。


4.使用实例


1)将当前工作目录下的文件回退到,两次提交之前的版本,同时,误删了hello.c文件(如果是增加了一些文件,那么没法用这个方法解决),需要进行恢复

               $ git checkout master             (1)
               $ git checkout master~2 Makefile  (2)
               $ rm -f hello.c
               $ git checkout hello.c            (3)


2)在错误的分支上进行了修改,现在需要转向正确的分支

$ git checkout mytopic

此时,我们往往会得到这样的输出:

如果修改没有被add进入index或者提交,将会得到提示信息:

error: Your local changes to the following files would be overwritten by checkout

此时,可以使用三路merge:

$ git checkout -m mytopic


3)利用git checkout创建分支

注意,我们可以用git checkout -b创建一个分支,但是它仅仅是创建一个分支,并不会改变stage文件,也不会改变当前工作目录



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值