git merge合并代码时可以带以下参数
--ff: 这是git merge的默认参数。ff即fast-forward的缩写,表示用fast-forward模式。这种方式会把源分支的提交历史合并到当前目标分支,提交历史相当于在当前分支进行的逐个提交。head指向源分支的最后一次提交代码,且不会为这次merge创建新的提交。比如回退代码到head^时,是包含合并代码的提交向前一步,即回退到源分支的倒数第2个提交上。
--no-ff:这是合并带注解tag时的默认参数,表示关闭fast-forward模式。会为这次merge创建一个新的提交。回退代码到head^时,是回退到不包含合并代码的目标分支的上一次提交,即merge前的版本。这种方式查看提交历史,提交结构清晰。
--squash:把源分支的提交合并成一个提交,然后合并到目标分支。
这些参数都会把源分支代码合并到目标分支,区别在于提交历史的整洁程度和向前看时的提交轨迹。
通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 develop 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 develop 的提交历史混入到 master 中,搅乱 master 的提交历史。如果根本不在意提交历史,也不爱管 master 干不干净,那么 –no-ff 其实没什么用。不过,如果某一次 master 出现了问题,你需要回退到上个版本的时候,就会比较混乱。而使用--no-ff时,回退到上一个版本,就会回到merge前的状态。