文章目录
- 一、前言
- 1.1、`master`分支
- 1.2、`dev`分支
- 二、合并
- 2.1、`git merge`
- 2.2、`git rebase`
- 三、总结
- 四、最后
一、前言
实际开发工作的时候,我们都是在自己的分支开发,然后将自己的分合并到主分支,那合并分支用2
种操作,这2
种操作有什么区别呢?
git
上新建一个项目,默认是有master
分支的,将项目克隆到本地,我们的准备工作就完成了
1.1、master
分支
执行git log
,可以看到有一个提交记录,是初始化提交
新增一个文件a.txt
,再次查看我们的提交记录,有2
条提交记录了
这个时候将本地新commit
的记录push
到远程仓库,就可以看到我们的2
次提交了
1.2、dev
分支
同学B
在已经有提交记录的master
分支上,检出分支dev
,并将分支推送到远程分支,并进行自己的开发
查看远程仓库,多了一个dev
分支
此时的git
分支类图是这样的
此时B
同学开始进行开发,完成了自己的3
次提交工作,使用git log
看一下
此时git
的分支类图是这样子的
二、合并
现在有这样一个现实的请况,就是B
同学准备进行第4
次提交的时候,同学A
在master
主分支上进行了一次提交,master
的提交已经向前走了
此时的git
分支类图是这样的
此时我们知道B
同学开发的dev
分支是基于C2
提交点切出来的,而这个时候master
分支已经被更新了
如果B同学开发完毕,需要将其所作的功能合并到master
分支 ,他可以有两种选择:
2.1、git merge
(1)找到master
和dev
的共同祖先,即C2
(2)将dev
的最新提交C5
和master
的最新提交即C6
合并成一个新的提交C7
,有冲突的话,解决冲突
(3)将C2
之后的dev
和master
所有提交点,按照提交时间合并到master
2.2、git rebase
切换分支到需要rebase
的分支,这里是dev
分支
执行git rebase master
,有冲突就解决冲突,解决后直接git add .
,再git rebase --continue
即可
发现采用rebase
的方式进行分支合并,整个master
分支并没有多出一个新的commit
,原来dev
分支上的那几次(C3
,C4
,C5
)commit
记录在rebase
之后其hash
值发生了变化,不在是当初在dev
分支上提交的时候的hash值了,但是提交的内容被全部复制保留了,并且整个master
分支的commit
记录呈线性记录
此时git
的分支类图
三、总结
git merge
会让2
个分支的提交按照提交时间进行排序,并且会把最新的2
个commit
合并成一个commit
。最后的分支树呈现非线性的结构
git reabse
将dev
的当前提交复制到master
的最新提交之后,会形成一个线性的分支树
四、最后
本人每篇文章都是一字一句码出来,希望对大家有所帮助,多提提意见。顺手来个三连击,点赞👍收藏💖关注✨,一起加油☕