一、git merge,合并代码
1、新建一个新仓库,在master分支上提交两次
当前仓库在master有两次commit,此时master的提交记录如下所示:
2、切一个develop分支,然后提交一次,此时develop分支的提交记录吐下所示:
3、git合并的参数
3.1、git merge fast-forward:合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移
切回master分支,然后使用git merge develop合并master代码
如上图所示,只是简单的指针右移
3.2、git merge --no-ff:在合并的时候会为merge创建一个commit信息
退回master的上次merge,然后使用git merge --no-ff develop
此时分支的记录变成了上面这样,强制加了一次commit提交
3、git merge -–squash:压缩一些不必要的commit
在develop分支上多几次commit
切回master,使用git merge --squash develop
可以看见只是把develop的新增的文件夹拉过来了,并没有将commit拉过来,这个时候需要手动git commit自己增加一次提交,相当于压缩commit
二、git rebase
git rebase有两个常用的功能,一个是合并代码,一个是处理commit
1、合并代码(合并代码主要是和merge合并代码做比较)
还是master上有两个提交,然后切换到develop上提交一次,再切换到master上提交一次,此时master的commit记录如下所示
develop上的commit如下所示
切换到develop上,使用git merge master合并master的代码,此时develop分支树如下所示
退回上次merge,使用git rebase master合并master的代码
可以看见此时develop的分支记录变成了这样,前面是master的记录后面是自己的记录,看起来非常的整齐
2、处理commit,git rebase -i :
合并commit:比如我们开发一个小的功能,在修复bug的时候,提交了很多次commit,但是最终我们只想要保留一次commit
比如我们的commit记录如下所示
这个时候想要把最近三次的commit合并成一次commit提交,git rebase -i HEAD^3,然后将最近三次的commit变成一次
将下面两次的pick改成squash,然后保存,写入一次新的commit message
结果如下所示
git rebase -i:i表示区间,几个常用的参数如下
(1)pick:要保留的commit
(2)reword:保留commit,但是重新编辑commit的message
(3)squash:将当前commit与前一个commit合并
(4)drop:删除commit
三、什么时候用merge,什么时候用rebase
1、多人开发用merge,主分支合并子分支用merge
2、子分支合并主分支,用rebase
写在最后:有错误的地方欢迎大家指正,也欢迎一起交流