摘要: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文件,也不会改变当前工作目录
 
 
                  
                  
                  
                  
                            
本文介绍git checkout命令的多种使用场景及示例,包括创建和切换分支、撤销文件修改、三路合并等。详解git checkout的不同选项及其作用,帮助读者更好地理解和运用此命令。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					877
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            