关于git merge
本文最后更新于 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为合并提交)

See you~
坦诚漫谈,祝你拥有美好的一天。
上一篇