zoukankan      html  css  js  c++  java
  • 16.分支切换

    要切换到一个已存在的分支,你需要使用 git checkout 命令。 我们现在切换到新创建的 testing 分支去:

    $ git checkout testing

    这样 HEAD 就指向 testing 分支了。

    HEAD 指向当前所在的分支。
    Figure 14. HEAD 指向当前所在的分支

    那么,这样的实现方式会给我们带来什么好处呢? 现在不妨再提交一次:

    $ vim test.rb
    $ git commit -a -m 'made a change'
    HEAD 分支随着提交操作自动向前移动。
    Figure 15. HEAD 分支随着提交操作自动向前移动

    如图所示,你的 testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所指的对象。 这就有意思了,现在我们切换回 master 分支看看:

    $ git checkout master
    检出时 HEAD 随之移动。
    Figure 16. 检出时 HEAD 随之移动

    这条命令做了两件事。 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。 也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing分支所做的修改,以便于向另一个方向进行开发。

    Note
    分支切换会改变你工作目录中的文件

    在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。

    我们不妨再稍微做些修改并提交:

    $ vim test.rb
    $ git commit -a -m 'made other changes'

    现在,这个项目的提交历史已经产生了分叉。 因为刚才你创建了一个新分支,并切换过去进行了一些工作,随后又切换回 master 分支进行了另外一些工作。 上述两次改动针对的是不同分支:你可以在不同分支间不断地来回切换和工作,并在时机成熟时将它们合并起来。 而所有这些工作,你需要的命令只有 branchcheckout 和 commit

    项目分叉历史。
    Figure 17. 项目分叉历史

    你可以简单地使用 git log 命令查看分叉历史。 运行 git log --oneline --decorate --graph --all (在我使用的git version 2.17.0.windows.1版本中有没有decorate输出结果都一样),它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况。

    $ git log --oneline --decorate --graph --all
    * c2b9e (HEAD, master) made other changes
    | * 87ab2 (testing) made a change
    |/
    * f30ab add feature #32 - ability to add new formats to the
    * 34ac2 fixed bug #1328 - stack overflow under certain conditions
    * 98ca9 initial commit of my project

    由于 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。 创建一个新分支就相当于往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?

    这与过去大多数版本控制系统形成了鲜明的对比,它们在创建分支时,将所有的项目文件都复制一遍,并保存到一个特定的目录。 完成这样繁琐的过程通常需要好几秒钟,有时甚至需要好几分钟。所需时间的长短,完全取决于项目的规模。而在 Git 中,任何规模的项目都能在瞬间创建新分支。 同时,由于每次提交都会记录父对象,所以寻找恰当的合并基础(译注:即共同祖先)也是同样的简单和高效。 这些高效的特性使得 Git 鼓励开发人员频繁地创建和使用分支。

  • 相关阅读:
    Android smali 语法
    iOS 发布计费点测试
    how-to-stop-non-jailbroken-pirates-theory
    shell script
    文章收藏
    NB BAT批量读取图片文件属性
    JAVA LUHN
    MAC NDK 编译 Cocos2dx 问题
    Mac 下解压缩安装Android ndk bin 文件
    MVC Json输出调试信息
  • 原文地址:https://www.cnblogs.com/hihtml5/p/9243837.html
Copyright © 2011-2022 走看看