先squash提交再合并到develop分支时使用merge-commit有什么好处?
Squash功能提交后保留merge commit的核心收益
- 清晰的功能合入粒度追溯
执行git log --first-parent develop查看develop分支的主干提交线时,每条merge commit直接对应一个完整功能,不需要混看功能内部的squash提交,能快速梳理出整个项目的功能迭代时间线。而且GitLab、GitHub等主流Git托管平台的PR合并生成的merge commit,会自动携带PR编号、审批人、CI执行结果等元信息,这些信息通常不会写到squash后的功能提交中,能完整留存合入流程的全量上下文。 - 极低的功能回滚成本
单个功能对应的所有改动完全被收敛在merge commit的两个父节点之间:第一个父节点是合入前的develop最新提交,第二个父节点是squash后的功能提交。要回滚整个功能时只需要执行git revert -m 1 <merge-commit-hash>即可,不需要额外定位功能对应的squash提交,也不会出现误回滚其他功能代码的问题。 - 准确的合入审计信息
squash后的功能提交的作者、提交时间属于开发阶段的信息,而merge commit记录的是代码实际合并到develop分支的操作人、操作时间,更符合合规审计、线上问题排查的需求,能准确追溯到功能正式进入待发布分支的时间点和合入责任人。 - 降低后续分支操作的冲突概率
如果后续需要基于旧的功能分支做迭代优化,有merge commit作为合入标记,rebase时Git可以自动识别已经合入过的提交,减少不必要的冲突提示,也能避免出现重复提交的问题。
内容的提问来源于stack exchange,提问作者Nikhil Bansal
相关产品推荐
相关产品推荐

