• 【Git企业开发】第一节.Git 的分支管理


    作者简介:大家好,我是未央;

    博客首页:未央.303

    系列专栏:Git企业级开发

    每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!!

    文章目录

    前言

    一、理解分支

    二、创建、切换、合并分支

    2.1 创建分支

    2.2 切换分支

    2.3 合并分支

    三、删除分支

    总结



    前言

    一、理解分支

    分⽀就是科幻电影里面的平行宇宙,当你正在电脑前努力学习 C++ 的时候,另一个你正在另⼀个平行宇宙里努力学习 JAVA。

    如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了 C++ 又学会了 JAVA!
    图片示例:

    举例说明:


    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就可以理解为是一个分支。截到目前,只有一条时间线,在Git里,这个分支叫主分支,即 master 分⽀。

    再来理解一下HEAD,HEAD 严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD 指向的就是当前分支。
    图片示例:
    每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长,而HEAD只要一直指向master分支即可指向当前分支。
    图片示例:

    通过查看当前的版本库,我们也能清晰的理出思路:
    代码示例:
    所以说HEAD指向的master分⽀是指向最新一次提交的;

    二、创建、切换、合并分支

    2.1 创建分支

    Git 支持我们查看或创建其他分支,在这里我们来创建第一个自己的分支 dev ,对应的命令为:
    代码示例:

    当我们创建新的分支后,Git 新建了一个指针叫 dev, * 表示当前 HEAD 指向的分支是 master 分支。
    另外,可以通过目录结构发现,新的 dev 分支:
    代码示例:
    hyb@139-159-150-152:~/gitcode$ ls .git/refs/heads/          #通过目录结构查看heads分支
    dev master
    hyb@139-159-150-152:~/gitcode$ cat .git/refs/heads/*    
    5476bdeb12510f7cd72ac4766db7988925ebd302
    5476bdeb12510f7cd72ac4766db7988925ebd302

    发现目前 dev 和 master 指向同一个修改。
    并且也可以验证下 HEAD 目前是指向 master 的。
    代码示例:
    hyb@139-159-150-152:~/gitcode$ cat .git/HEAD
    ref: refs/heads/master

    图示总结上述过程:


    2.2 切换分支

    那如何切换到 dev 分支下进行开发呢?使用git checkout 命令即可完成切换,
    代码示例如下:
    hyb@139-159-150-152:~/gitcode$ git checkout dev      #切换到dev分支
    Switched to branch 'dev'
    hyb@139-159-150-152:~/gitcode$ git branch           #此时HEAD 指向的分⽀是dev分支
    * dev
    master
    hyb@139-159-150-152:~/gitcode$ cat .git/HEAD   # 验证下 HEAD⽬前是指向 master 
    ref: refs/heads/dev

    图示说明上述过程:

    我们发现 HEAD 已经指向了 dev,就表示我们已经成功的切换到了 dev 上!

    接下来,在 dev 分支下修改 ReadMe 文件,新增一行内容,并进行一次提交操作:
    代码示例:
    hyb@139-159-150-152:~/gitcode$ vim ReadMe             #修改文件内容
    hyb@139-159-150-152:~/gitcode$ cat ReadMe              #查看文件的内容
    hello bit
    hello git
    hello world
    hello version1
    hello version2
    hello version3
    write aaa for new branch                                                  #发现在文件中新增了一行内容
    hyb@139-159-150-152:~/gitcode$ git add .                     #将工作区的文件添加到暂存区
    hyb@139-159-150-152:~/gitcode$ git commit -m"modify ReadMe"
                                                                                                #将工作区的文件提交到本地库
    [dev 3740dce] modify ReadMe
    1 file changed, 1 insertion(+)

    现在,dev 分支的工作完成,我们就可以切换回 master 分支:
    代码示例:
    hyb@139-159-150-152:~/gitcode$ git checkout master      #切换回master分支
    Switched to branch 'master'
    hyb@139-159-150-152:~/gitcode$ cat ReadMe                    #查看ReadMe文件的内容
    hello bit
    hello git
    hello world
    hello version1
    hello version2
    hello version3

    切换回 master 分支后,发现ReadMe文件中新增的内容不见了!!!赶紧再切回 dev 看看:
    代码示例:
    hyb@139-159-150-152:~/gitcode$ git checkout dev      #切换到dev分支
    Switched to branch 'dev'
    hyb@139-159-150-152:~/gitcode$ cat ReadMe              #查看文件的内容
    hello bit
    hello git
    hello world
    hello version1
    hello version2
    hello version3
    write aaa for new branch
    在 dev 分支上,内容还在。
    为什么会出现这个现象呢?我们来看看 dev 分支和 master 分支指向,发现两者指向的提交是不一样的:
    代码示例:
    hyb@139-159-150-152:~/gitcode$ cat .git/refs/heads/dev
    bdaf528ffbb8e05aee34d37685408f0e315e31a4
    hyb@139-159-150-152:~/gitcode$ cat .git/refs/heads/master
    5476bdeb12510f7cd72ac4766db7988925ebd302
    看到这里就能明白了,因为我们是在dev分支上提交的,而master分支此刻的提交点并没有变,此时的状态如图如下所示。

    图示状态说明:

    当切换到 master 分支之时,HEAD 就指向了 master,当然看不到提交了!

    2.3 合并分支

    为了在 master 主分支上能看到新的提交,就需要将 dev 分支合并到 master 分支。
    代码⽰例如下:
    hyb@139-159-150-152:~/gitcode$ git branch
    * dev
    master
    hyb@139-159-150-152:~/gitcode$ git checkout master     # 切换到 master 上进行合并
    Switched to branch 'master'
    hyb@139-159-150-152:~/gitcode$ git merge dev               # 合并 dev 分支
    Updating 16623e1..3740dce
    Fast-forward
    ReadMe | 1 +
    1 file changed, 1 insertion(+)
    hyb@139-159-150-152:~/gitcode$ cat ReadMe                  # 此时我们再查看ReadMe
    hello bit
    hello git
    hello world
    hello version1
    hello version2
    hello version3
    write aaa for new branch
                                                                                                                                                      
    git merge 命令用于合并指定分支到当前分支。合并后,master 就能看到 dev 分支提交的内容了。此时的状态如图如下所示

    图示状态过程:

    Fast-forward 代表“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。 当然,也不是每次合并都能 Fast-forward,我们后面会讲其他方式的合并。

    三、删除分支

    合并完成后, dev 分支对于我们来说就没用了, 那么dev分支就可以被删除掉,注意如果当前正处于此分支下,就不能删除当前分支,如:
                                                                                                                                                      
    代码示例:
    hyb@139-159-150-152:~/gitcode$ git branch                      #查看本地分支情况
    * dev
    master
    hyb@139-159-150-152:~/gitcode$ git branch -d dev            #删除dev分支
    error: Cannot delete branch 'dev' checked out at '/home/hyb/gitcode'

    而可以在其他分支下删除当前分支,如:
                                                                                                                                                      
    hyb@139-159-150-152:~/gitcode$ git checkout master        #切换到master分支            
    Switched to branch 'master'
    hyb@139-159-150-152:~/gitcode$ git branch -d dev              #删除dev分支
    Deleted branch dev (was bdaf528).
    hyb@139-159-150-152:~/gitcode$ git branch                         #查看本地分支情况
    * master                                                                                        #此时只有master分支了
    此时的状态如图如下所示。

    图示状态示例:

    因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

    总结

  • 相关阅读:
    react生命周期钩子函数
    Jmeter 多实例压测
    剖析虚幻渲染体系(17)- 实时光线追踪
    CF比赛1610D. Not Quite Lee(Codeforces Global Round 17)(数学)(计数)
    基于PHP的毕设双选管理系统
    JAVA异常输出到控制台
    数据库的约束
    springcloude gateway的意义
    今日头条小程序是什么
    关于简单线性代数——矩阵乘法与行列式
  • 原文地址:https://blog.csdn.net/qq_64861334/article/details/134076615