• git分支


    Git的分支,本质上仅仅是指向提交对象的可变指针。Git的master分支并不是特殊分支,它与其他分支没有区别,之所以几乎每个仓库有master分支,是因为git init命令默认创建它,并且大多数人都懒得去改动它。如果想在开发过程中想创建分支进行相关操作,可进行如下操作:

    分支创建命令:

    $ git branch testing
    

    表示在当前所在的提交对象上创建一个名为testing的分支。

     

                                                              图1 创建testing分支

    图1表示三次提交历史,当前提交对象为f30ab(这是SHA-1校验和的简短表示,每个提交对象都会有对应的校验和,Git用以计算校验和的机制叫做SHA-1散列,它是由40个十六进制(0-9,a-f)组成的字符串,基于Git中文件的内容和目录结构计算出来,git数据库中保存的文件信息都是以文件内容的哈希值来索引,而不是文件名),此时master和testing两分支都指向f30ab。

    图中Head是一个特殊指针,指向当前所在的本地指针,也可将head想象成为当前的分支的别名,如本例中head指向master分支,说明此时依旧在master分支。注意,使用上述命令创建分支并不会自动切换到新分支上,如果想切换分支,可以利用

     $ git checkout testing  

    命令来切换分支(但是,在这么做之前,要留意工作目录和暂存区里那些还没有被提交的修改,它可能会和即将检出的分支产生冲突,从而阻止git切换到该分支。最好的方法是,在切换分支之前,保持好一个干净的状态。 有一些方法可以绕过这个问题(即保存进度(stashing) 和 修补提交(commit amending)))。此时,head指针便指向testing分支。

                                                    图2 切换分支

    head分支会随着提交操作自动向前移动,为了说明这一现象,可以再次提交一个任务,

                                                               图3 head分支向前移动

    如图3所示,在分支为testing情况,提交一个任务,此时testing分支向前移动了,但是master分支没有,此时切回master分支时

    $ git checkout master

                                                             图4 检出时head随之移动

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

    还有一种带-b的切换分支命令,表示在创建分支testing的同时,切换分支到testing

    $ git checkout -b testing
    

     等价于

    $ git branch testing
    $ git checkout testing 

    由于git分支实质上仅是包含所指对象校验和(长度为40的SHA-1值字符串)的文件,创建一个分支就相当于往一个文件中写入41字节(40个字符串+1个换行符),所以它的创建和销毁也会异常高效。

  • 相关阅读:
    LeetCode234回文链表
    LeetCode445两数相加II
    LeetCode24两两交换链表中的节点
    LeetCode19删除链表的倒数第N个节点
    LeetCode513找树左下角的值
    LeetCode637二叉树的层平均值
    LeetCode671二叉树中第二小的节点
    LeetCode337打家劫舍III
    LeetCode124二叉树中的最大路径和
    LeetCode687最长同值路径
  • 原文地址:https://www.cnblogs.com/alice-cj/p/10226597.html
Copyright © 2020-2023  润新知