• git中的分支运用(branch建立、 conflict处理)


    一、创建与合并分支

    1.1、branch逻辑

      Git里存在一个主分支,即master分支。HEAD指向master,而master则是指向提交的,所以,HEAD指向的就是当前分支。一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。如下图(1)所示。
         在这里插入图片描述
      当创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。如上图(2)所示。从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。如下图(3)所示。
    在这里插入图片描述
      当我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。如上图(4)所示。合并完分支后,可以直接删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支了。回到上图(1)。

    1.2、branch实践

    • 创建dev分支,然后切换到dev分支
    $ git checkout -b dev
    Switched to a new branch 'dev'
    
    //git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 查看当前分支:(当前分支前面会标一个*号)
    $ git branch
     * dev
      master
    //git branch命令会列出所有分支,当前分支前面会标一个*号。
    
    • 1
    • 2
    • 3
    • 4
    • 分支上提交文件:在新建的dev分支上提交文件readme.txt(比如对readme.txt做个修改,加上一行)。
    //readme.txt文件新添加一行如下:
    Creating a new branch is quick.
    
    • 1
    • 2
    $ git add readme.txt 
    $ git commit -m "branch test"
    [dev b17d20e] branch test
     1 file changed, 1 insertion(+)
     
    //dev分支的工作完成,现在可以切换回master分支
    $ git checkout master
    Switched to branch 'master'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

      切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变。分支逻辑图如下所示。
                  在这里插入图片描述

    • 分支合并:(将dev分支的工作成果合并到master分支上)
    $ git merge dev
    Updating d46f35e..b17d20e
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    
    • 1
    • 2
    • 3
    • 4
    • 5

      git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。合并完成后,就可以放心地删除dev分支了。

    • 删除分支
    $ git branch -d dev
    Deleted branch dev (was b17d20e).
    
    • 1
    • 2

    二、分支冲突处理

      在使用git过程中,合并分支往往不是一帆风顺的。当在不同分支上提交同名文件时,如果同名文件中相同的行的内容存在差异时,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。
      示例:

    1 、准备新的feature1分支 ,并将修改后的readme.txt文件在feature1分支上提交:

    $ git checkout -b feature1                 //创建并切换到新的分支feature1上
    Switched to a new branch 'feature1'
    
    $ git add readme.txt                       //文件最后一行更改为:Creating a new branch is quick AND simple.
    $ git commit -m "AND simple"               //在分支feature1上提交readme.txt文件
    [feature1 14096d0] AND simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    //readme.txt —— 最后一行:
    Creating a new branch is quick AND simple.
    
    • 1
    • 2

    2 、切换到master分支 ,并将修改后的readme.txt文件在master分支上再次提交:

    $ git checkout master                     //切换到master上,Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
    
    $ git add readme.txt                     //文件最后一行更改为:Creating a new branch is quick & simple.
    $ git commit -m "& simple"               //在分支master提交readme.txt文件
    [master 5dc6824] & simple
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    //readme.txt —— 最后一行:
    Creating a new branch is quick & simple.
    
    • 1
    • 2

    3 、master分支和feature1分支各自都分别有新的提交,逻辑线变成了下图(5)这样:
    在这里插入图片描述
      这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,操作如下(git merge feature1)。Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。

    $ git merge feature1
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
    • 1
    • 2
    • 3
    • 4

      git status也可以告诉我们冲突的文件

    $ git status
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add ..." to mark resolution)
    
    	both modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4 、直接查看readme.txt的内容:(Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable index called stage.
    Git tracks changes of files.
    <<<<<<< HEAD                                    
    Creating a new branch is quick & simple.              //HEAD指向的master分支上的冲突内容
    =======
    Creating a new branch is quick AND simple.            //feature1分支上的冲突内容
    >>>>>>> feature1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5 、修改冲突行如下后保存,再提交。现在,master分支和feature1分支变成了上图(6)所示:

    //修改冲突行
    Creating a new branch is quick and simple.
    
    //再次提交
    $ git add readme.txt 
    $ git commit -m "conflict fixed"
    [master cf810e4] conflict fixed
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6 、删除feature1分支:

    $ git branch -d feature1
    Deleted branch feature1 (was 14096d0).
    
    • 1
    • 2

    参考:https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

  • 相关阅读:
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    基于大模型思维链(Chain-of-Thought)技术的定制化思维链提示和定向刺激提示的心理咨询场景定向ai智能应用
    Typora+PicGO+腾讯云COS做图床
    vmware17.0|ubuntu22.04.0 解决灰色Vmware Tool 无法重新安装和 无法和win11相互拖拽文件问题
    该设备正在使用中。请关闭可能使用该设备的所有程序或窗口,然后重试。
    Java 8实战(八)- 数值流与构建流
    sCrypt 合约中的椭圆曲线算法:第二部分
    基于Pytorch的从零开始的目标检测
    基于最小二乘插值(Least-Squares Interpolation)图像超分辨率重构算法研究-附Matlab代码
    【C++11并发】thread 笔记
  • 原文地址:https://blog.csdn.net/weixin_46022434/article/details/127756534