一、git merge,合并代码

1、新建一个新仓库,在master分支上提交两次

当前仓库在master有两次commit,此时master的提交记录如下所示:

简单记录git merge和git rebase_学习

2、切一个develop分支,然后提交一次,此时develop分支的提交记录吐下所示:

 简单记录git merge和git rebase_git_02

3、git合并的参数

3.1、git merge fast-forward:合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移

切回master分支,然后使用git merge develop合并master代码

简单记录git merge和git rebase_分支合并_03

简单记录git merge和git rebase_学习_04

简单记录git merge和git rebase_git_05

如上图所示,只是简单的指针右移 

3.2、git merge --no-ff:在合并的时候会为merge创建一个commit信息

退回master的上次merge,然后使用git merge --no-ff develop

简单记录git merge和git rebase_学习_06

简单记录git merge和git rebase_学习_07

此时分支的记录变成了上面这样,强制加了一次commit提交

3、git merge -–squash:压缩一些不必要的commit

在develop分支上多几次commit

简单记录git merge和git rebase_学习_08

切回master,使用git merge --squash develop

简单记录git merge和git rebase_分支合并_09

可以看见只是把develop的新增的文件夹拉过来了,并没有将commit拉过来,这个时候需要手动git commit自己增加一次提交,相当于压缩commit 

简单记录git merge和git rebase_git_10

二、git rebase

git rebase有两个常用的功能,一个是合并代码,一个是处理commit

1、合并代码(合并代码主要是和merge合并代码做比较)

还是master上有两个提交,然后切换到develop上提交一次,再切换到master上提交一次,此时master的commit记录如下所示

简单记录git merge和git rebase_git_11

develop上的commit如下所示

简单记录git merge和git rebase_git_12

切换到develop上,使用git merge master合并master的代码,此时develop分支树如下所示

简单记录git merge和git rebase_分支合并_13

 退回上次merge,使用git rebase master合并master的代码

简单记录git merge和git rebase_git_14

可以看见此时develop的分支记录变成了这样,前面是master的记录后面是自己的记录,看起来非常的整齐 

2、处理commit,git rebase -i :

合并commit:比如我们开发一个小的功能,在修复bug的时候,提交了很多次commit,但是最终我们只想要保留一次commit

比如我们的commit记录如下所示

简单记录git merge和git rebase_分支合并_15

这个时候想要把最近三次的commit合并成一次commit提交,git rebase -i HEAD^3,然后将最近三次的commit变成一次

简单记录git merge和git rebase_学习_16

将下面两次的pick改成squash,然后保存,写入一次新的commit message

简单记录git merge和git rebase_学习_17

结果如下所示

简单记录git merge和git rebase_分支合并_18

  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

写在最后:有错误的地方欢迎大家指正,也欢迎一起交流