在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面工作;日常开发应该在另一条分支上完成。我们把开发用的分支,叫做 Develop
。
工作都在Develop
分支上,也就是说,Develop
分支是不稳定的,到某个时候,比如1.0版本发布时,再把Develop
分支合并到master
上,在master
分支发布1.0版本;
我们和我们的小伙伴们每个人都在Develop
分支上工作,每个人都有自己的分支,时不时地往Develop
分支上合并(merge)就可以了。
- 拉取源:master。
- 合并目标:无需。
- 修改:不允许。
- 生命期:持续。
1.Git创建Develop分支的命令:
$ git checkout -b develop master
2.将Develop分支发布到Master分支的命令:
# 切换到Master分支
$ git checkout master
# 对Develop分支进行合并
$ git merge --no-ff develop
上一条命令的--no-ff
参数是什么意思 ?
默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
使用--no-ff
参数后,会执行正常合并,在Master分支上生成一个新节点 .
下面我们通过例子来演示 :
1.创建并切换到 develop
分支
$ git checkout -b develop master
2.修改readme.txt
文件,并提交一个新的 commit:
$ git add readme.txt
$ git commit -m "add merge"
[develop 15486a1] add merge
1 file changed, 1 insertion(+), 1 deletion(-)
3.现在,我们切换回master
:
$ git checkout master
4.准备合并dev
分支,请注意--no-ff
参数,表示禁用Fast forward
:
$ git merge --no-ff -m "merge with no-ff" develop
Merge made by the 'recursive' strategy.
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
5.因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* 6e318d8 merge with no-ff
|\
| * 15486a1 add merge
|/
* c77e828 conflict fixed
|\
| * f64e72b AND simple
* | 9d27459 & simple
|/
* 2b76425 readme.txt
所以, 验证了 : 使用--no-ff
参数后,会执行正常合并,在Master分支上生成一个新节点 .