本文前提:本地和远程存在master、test、dev三个分支,并且一一对应,本地dev开发完成后,要合并到test,test测试完成后合并到master
1、从dev合并到test
正常的场景中,master和test两个分支是禁止普通开发人员直接push的,现在讨论的是具有权限的人员的操作。
在开发当中无论是否要合并分支,无论在哪个分支,注意本地分支要在commit以后push到远程,要首先保持同一个分支的一致性。
1 首先切换到dev分支,执行commit和push
2 有权限的人员在每个分支 git pull 拉取所有代码以后,从dev转到test
git checkout test
3 然后从dev合并到test
git merge dev
注意:这种合并一般情况下使用的是快进模式(Fast-forward),也就是直接把test指向dev的当前提交,
所以合并速度非常快。但这种模式下,删除dev分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。命令如下:
git merge --no-ff -m "merge dev to test with no-ff" dev
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
建议开发中都用这种 no-ff 模式
4 现在本地dev已经合并到test了,下面把本地test的变化提交到远程(当前在test分支):
git push
我们在远程服务器上面看一下test分支的网络图:
2、从test合并到master
操作流程和前面的差不多:
1 git checkout master
2 git merge --no-ff -m "merge test to master with no-ff" test
3 git push
我们在远程服务器上面看一下master分支的网络图:
3、其它情况
有时候在远程仓库私服上面禁止了所有人的push操作,那合并分支只能在私服页面上进行,
这种操作一般也是由权限高的人进行的
不过gitlab在这方面很多老版本都有问题,会出现报错页面,大家可以多试几次。。。