Git分支

Source

1 分支的概念

在版本控制过程中,同时推进多个任务,可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
如下图所示:
在这里插入图片描述
上图的意思:当前处在master分支,一个需求是需要将外观改为蓝色,于是产生一个feature-blue分支,进行开发,经过一个版本的迭代,达到预期要求,然后与master分支合并,即v1.1版本。在v1.1版本基础上,需要紧急修复(hot-fix),修复好了再合并,即v1.2版本。在最初的feature-blue基础上,需要开发一个游戏(feature-game),经过三个版本迭代,与v1.2版本合并,即v2.0版本。

2 分支的好处

  • 同时并行推进多个功能开发,提高开发效率。
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支将其删除,再重新开始即可。

3 分支操作(命令)

命令 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名(指定) 把指定的分支合并到当前分支上

3.1 查看分支

命令:git branch -v
在这里插入图片描述

3.2 创建分支

命令:git branch 分支名
比如现在代码需要紧急热修复,所以创建一个hot-fix分支,操作如下所示:
在这里插入图片描述
可以看到创建的hot-fix分支的版本和提交记录都是相同的,说明hot-fix分支的内容是从主分支master上复制的

3.3 切换分支

命令:git checkout 分支名
在这里插入图片描述
在hot-fix分支下修改c.txt文件,
在这里插入图片描述
master分支上的c.txt文件的内容不受影响:
在这里插入图片描述

3.4 合并分支

3.4.1 正常合并

由上面的结果可知:hot-fix分支下的c.txt内容发生了改变

  • hot-fix分支下的c.txt文件内容为:
    在这里插入图片描述
  • master分支下的c.txt文件内容为:
    在这里插入图片描述

所以hot-fix分支下的c.txt添加了最后一行“hot-fix第一次修改”
现在将hot-fix分支合并到master分支,命令:git merge 分支名
注意:命令中的分支名是要合并到当前分支下的。所以把hot-fix分支合并到master分支,应该首先切换到master分支,再使用:git merge hot-fix
在这里插入图片描述
上面的结果表示合并成功,没有冲突

3.4.2 合并成功的前提

如果要将hot-fix分支成功合并到master分支,前提必须是hot-fix分支下文件发生了修改。但如果hot-fix分支和master分支下的文件都发生了修改,则会产生合并冲突,但冲突可以解决,在3.4.3中讲解。
在这里插入图片描述
从上图可以看出,master分支和hot-fix分支下的c.txt文件是相同的。现在还是把hot-fix分支合并到master分支按照上面的前提,hot-fix分支下文件必须发生修改,所以验证的时候保持hot-fix分支下文件不变,master分支下文件:(1)不变、(2)改变。
(1)master分支下文件不变
在这里插入图片描述
(2)master分支下文件改变
在这里插入图片描述
但是此时由于master分支下文件发生了改变,所以可以得出一个结论:master分支可以合并到hot-fix分支。这个结论与上面的前提相互照应。验证如下:
在这里插入图片描述

3.4.3 冲突合并(重要)

实际开发过程中经常会遇到代码冲突问题,这种情况下该如何合并非常重要。从3.4.2的例子可以看到,此时master分支合并到了hot-fix分支,所以两个分支下的文件都相同。现在还是讨论将hot-fix分支合并到master分支,规律:要使得hot-fix分支能合并到master分支,则hot-fix分支下文件必须发生改变(3.4.2内容),如果master分支下文件此时也发生了改变,则合并时就会产生冲突。演示如下:
两个分支下的相同文件都发生了改变:
在这里插入图片描述
进行合并:
在这里插入图片描述
那么如何解决合并中产生的冲突呢:手动解决,如下所示:
先在master分支下使用vi c.txt指定打开c.txt文件
在这里插入图片描述
手动修改
成想要得到的内容,并删除<、=、>符号即可,如下所示:
在这里插入图片描述
最后再git add、git commit即可。但是此时git commit不能带文件名,否则提交失败。
在这里插入图片描述

4 创建分支和切换分支的本质

上面的master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,实际上是由HEAD决定的。所以创建分支的本质就是多创建一个指针切换分支的本质是HEAD指针的移动


结束语:如果本篇博客对您有帮助,请点赞、关注或收藏,您的鼓励是博主进步的动力,感谢支持,共同进步。