本文最后更新于 40 天前,其中的信息可能已经有所发展或是发生改变。
在团队协作中,我们可能会使用到git flow,或者类工作模式。
而笔者关于对feature和develop的分支理解有些许的困惑,经过查询大概理解。
feature
feature的作用就是对你想要进行开发的功能,进行一个不断的开发,测试…
feature上开发的分支,一旦开发完毕,合并到develop上,就要被删除。
develop
develop则是集成功能分支,将多个feature上的功能合并到develop上,develop呈现的是一个目前版本来说,功能开发相对完整的分支,至于后续,可能还会有bugfix,release,等等分支,来继续对develop上的功能进行处理,这里不再深究。
关于将feature合并到develop
笔者看来,合并无非是
git switch develop
git merge feature/xx
实际情况却是这样的
git switch develop
git merge --no-ff feature/xx -m "release: 合并xx功能"
关于 –no-ff
如何理解–no-ff呢,简单一句话理解就是非快进合并。对于直接的git merge 就是快进合并。
--no-ff 选项,是 Git 合并时强制禁止快进式合并的标志。
具体作用
- 强制创建合并提交,即使
develop没有新提交,也会生成一个提交对象(commit),其父提交有两个:develop原来的最新提交和feature的最新提交。 - 这个合并提交包含了整个 feature 分支的改动,并且明确记录了“这是一个功能合并事件”。
- 可以通过
-m为这个合并提交指定提交信息(如"release: 合并用户积分系统功能"),方便日后阅读。
快进合并 vs 非快进合并
快进合并
当 develop 分支自 feature 分支创建后没有产生新的提交,develop 的指针直接向前移动到 feature 分支的最新提交。
没有额外的合并提交,历史是一条直线。
合并前:
A---B---C feature
/
D---E develop
合并后(fast-forward):
A---B---C develop, feature
/
D---E
非快进合并
无论 develop 是否有新提交,Git 都强制创建一个新的合并提交,将两个分支的历史连接在一起。
即使可以进行快进,也会生成一个合并节点。
合并前:
A---B---C feature
/
D---E develop
合并后(--no-ff):
A---B---C feature
/ \
D---E-----------F develop (F为合并提交)
