文章目录
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指针的移动。
结束语:如果本篇博客对您有帮助,请点赞、关注或收藏,您的鼓励是博主进步的动力,感谢支持,共同进步。