`
songkang666
  • 浏览: 103136 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Git step by step 9 之checkout

    博客分类:
  • GIT
 
阅读更多
在介绍checkout之前,必须要先介绍分支(git的分支模型)
用下面的图1可以不严谨但简易地说明分支是个什么东西:

图中有两个分支,分别命名为master和new branch。
一般情况下,新创建的git,只要进行了提交,会自动生成名为master的分支。
图中的HEAD(固有的一个类似于指针的东西)始终指向的是你目前处于的分支的最新提交上。(此图中,HEAD就指向了master分支的最新提交commit 4上)
这个图可能是这样生成的:
首先是进行了提交commit 1;
然后进行了提交commit 2,在这个地方,你发现之后的工作可能有两种方法可以实现,所以你新创建了一个分支new branch(即,git branch new_branch,虽然master分支与new_branch的最新提交都是commit 2,但是HEAD还是指向master分支的最新提交上,因为你没有手动切换到new_branch这个分支上);
再然后就是继续进行commit 3,由于HEAD指向的是master分支的最新提交上,所以现在走的依然是master这条分支的线,所以进行commit 3之后,HEAD指向了commit 3;
接着进行commit 4。
你还没有将master分支进行完,你发现这种方法有点繁琐,所以想用另一种方法,所以进行了分支切换,即, git checkout new_branch,此刻HEAD指向了new_branch分支的最新提交(即commit 2),
紧提前又进行了提交commit 3’,
然后又提交commit 4’,你发现这种方法行不通,于是又切换到master分支上,即 git checkout master,进行繁琐的操作,此时HEAD指向了commit 4。

git checkout基本介绍
从上面对图1的解释,就可以发现git checkout的一个重要的作用,即切换分支(实际上是改变HEAD的指向)。它还有恢复文件的功能,以及检查工作目录、暂存区与HEAD指向的分支的最新的一次提交的差异。

1、切换分支
git checkout <branch>

这个就是切换分支,当然需要注意的是切换分支后,工作目录、暂存区的内容会与该分支最新的一次提交保持一致。
这一点有点像git reset --hard <commit>,较容易弄混,但git reset相当于版本回退,不容易恢复,而git checkout <branch>只是切换到了另一个开发方法的路径上去,很容易再切换回来。

另外,当你想切换到某个commit处,但这个commit处没有分支,那么可以用 git checkout <commitX> ,此刻HEAD只是指向了这个commitX(处于分离头指针的状态--这个概念不用太理解,就是HEAD指向了一个地方,这个地方不能用一个分支名来定位它),在此处再进行提交commitY,然后再切换到别的分支时,你做的那个commitY就找不到了,所以要想使这个commitY在切换分支以后还可以看到,那么要先在此处建立一个分支,即 git branch new_branch, 这个new_branch的最新提交就是<commitX>,然后用 git checkout new_branch ,即切换到新建的分支new_branch上,然后再进行提交commitY。

上面的
git checkout <commitX>
git branch new_branch
git checkout new_branch

其实可以简化为一句
git checkout <commitX> -b new_branch

或者
git checkout -b new_branch <commitX>

即可切换到commitX处并新建分支。

2、检查差异
git checkout 或
git checkout HEAD

是检查工作目录、暂存区与HEAD指向的commit的差异。

3、恢复文件(这个感觉有点绕)
恢复文件包含两个可能性,一是恢复恢复暂存区中的文件到工作目录中,二是恢复某一分支的文件到暂存区以及工作目录,即下图


图中显示
git checkout branch -- filename 或
git checkout branch . // 注意这里有个点

以及
git checkout -- filename 或
git checkout . // 注意这里有个点

前者将某一分支的某个文件(filename指定的文件)或全部文件(用.——点指定)都恢复到暂存区以及工作目录;
后者是将暂存区中的全部文件恢复到工作目录中。

此处要特别注意的是
1、若工作目录(或暂存区)没有某文件,那么恢复后会创建该文件;
2、若工作目录(或暂存区)有要被恢复的文件,但内容不一致(即修改了),那么文件内容会被恢复;
3、若工作目录(或暂存区)有个额外新添加的文件,那么这个文件不会被删除。


more:
git checkout之二 切换到分支和文件覆盖
  • 大小: 9.8 KB
  • 大小: 69.7 KB
分享到:
评论

相关推荐

    Git-2.21.0-64-bit.zip

    advancing the current history" out of the single "git checkout" command. * "git branch --list" learned to always output the detached HEAD as the first item (when the HEAD is detached, of course),...

    graphql-demo:Graphql服务器端和客户端演示

    GraphQL服务器端设置git checkout server Apollo graphQL服务器设置GraphQL客户端React客户端设置git checkout step-01 Apollo客户端设置和API查询git checkout step-02 从外部graphQL 获取数据阿波罗(Apollo)镀...

    NG2-Socially:Angular2 +流星演示

    git clone :ShMcK / NG2-Socially.git cd NG2-Socially脚步git checkout -f步骤-00git checkout -f step-01git checkout -f步骤02git checkout -f步骤03git checkout -f步骤04git checkout -f步骤05git checkout -...

    react-step-by-step

    React逐步教程请使用git checkout tags/step-[n]移动第1步:最少的设置以开始使用react; 步骤2:基本jsx语法; 第三步:嵌套渲染; 步骤4:零件的道具和造型; 步骤5:无状态和有状态组件; 步骤6:生命周期方法; ...

    angular-master-class-jump-start:Angular大师班-快速入门

    角度大师班 该存储库包含Thoughtram编写的有关Angular Master Class课件的所有Lab Solutions 。 学习模块 ...git checkout observables-step- 模块3: git checkout architecture-step- 单元4: g

    how-to-become-a-web-developer-example

    如何建立踢屁股网站 入门 使用git clone ...查看HTML版本git checkout step-1 查看HTML + CSS版本git checkout step-2 查看HTML + CSS + JS版本git checkout step-3 链接

    error304-d3-tutorial:为 error304 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    dlnglr-d3-tutorial:为 dlnglr 创建的 d3-tutorial

    UniWien D3 演示这是... 基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    juksu-d3-tutorial:为 juksu 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    snowysandro-d3-tutorial:为 snowysandro 创建的 d3-tutorial

    UniWien D3 演示这是... 基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    rutschifengga-d3-tutorial:为 rutschifengga 创建的 d3-tutorial

    UniWien D3 演示这是... 基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    Christoph-d3-tutorial:为 Christoph 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    pikatma-d3-tutorial:为 pikatma 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    a1247418-d3-tutorial:为 a1247418 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    D3-Demo:UniWien D3 演示代码

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    a0906960-d3-tutorial:为 a0906960 创建的 d3-tutorial

    UniWien D3 演示这是... 基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    anreitersimon-d3-tutorial:为 anreitersimon 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    Iris-Reihs-d3-tutorial:为 Iris-Reihs 创建的 d3-tutorial

    UniWien D3 演示这是... 基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    btschia-d3-tutorial:为 btschia 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

    patrickm90-d3-tutorial:为 patrickm90 创建的 d3-tutorial

    基本文件布局( git checkout -f barchart-step0 ) 添加 svg 元素( git checkout -f barchart-step1 ) 设置绘图大小和边距( git checkout -f barchart-step2 ) 加载数据文件( git chec

Global site tag (gtag.js) - Google Analytics