git合并
gitHub pull requset 的三种合并方式
多个commit直接合并到master上
多个commit合成一个再合并到master上
产生了一个merge的commit
快速合并和非快速合并
1 | $ git merge feature/a # 快速合并 |
快速合并
会直接将 master 指向了 feature/a,如下图所示:非快速合并
会在 master 创建合并提交节点,如下图所示:
但是,master分支的历史记录有可能在bugfix分支分叉出去后有新的更新。这种情况下,要把master分支的修改内容和bugfix分支的修改内容汇合起来。
因此,合并两个修改会生成一个提交。这时,master分支的HEAD会移动到该提交上。
两种合并方式都可以,如果选择快速合并,需要保证每个提交都是独立且完整的,如果不满足要求,Git 支持修改提交历史,需要修改后再次合并。
合并你的开发分支
在合并之前,建议先将主分支新的提交合并到当前分支,有两种策略可以选择,合并和变基,合并操作更简单,变基操作提交树更清晰,建议使用变基的方式。
合并操作的过程,命令如下:
1
2
3$ git merge master
$ git checkout master
$ git merge feature/a合并操作后的提交树如下图所示:
变基会修改feature/a的历史,就像 feature/a 是在 master 之后开发的一样,变基命令如下:
1
2
3$ git rebase master
$ git checkout master
$ git merge feature/a变基操作后的提交树如下图所示,虚线的提交是feature/a变基之前的状态,在变基后,虚线的提交不再有分支指向,但并不会删除,而是变成Git中的游离节点,在Git执行GC(垃圾清理)操作后,节点才会彻底删除。
当多个开发分支时,故障分支合并
如果发现存在 Bug,要尽快修复,此时可以基于主分支新建故障分支,命令如下:
1 | git checkout -b bugfix/b |
当验证没问题后,故障分支需要合并回主分支,并在主分支上发布新的补丁版本,命令如下:
1 | $ git checkout master |
主分支更新后,下游的公共分支要及时同步变更,建议使用变基进行同步,命令如下:
1 | git checkout feature/a |
故障分支模型如下图所示,bugfix/b 分支合并到 master 后,feature/a 分支进行了变基操作。