You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现develop分支存提交历史,main分支仅保留合并提交?解决squash merge问题

实现develop完整提交、main仅保留合并提交的正确方案

你遇到的squash merge后仍显示分支差异的问题,根源是squash merge会生成全新的压缩提交,但原develop分支的提交并未被main的历史纳入,所以Git对比时会判定存在未合并的提交记录,哪怕文件内容完全一致。以下是两种符合需求的解决方案:

方案一:使用--no-ff合并(Bitbucket环境首选)

这种方式既能让main分支仅保留清晰的合并提交节点,又能完整保留develop分支的提交历史,方便在Bitbucket回溯:

  • 切换到main分支:git checkout main
  • 拉取远程最新main代码:git pull origin main
  • 合并develop分支并禁用快进模式:git merge --no-ff develop
  • 推送到远程仓库:git push origin main

操作完成后,main分支的历史只会显示一个个合并提交,每个合并提交可关联到develop分支里的所有具体修改记录;你随时可以在Bitbucket中查看develop分支的提交列表,回溯每一次代码变更细节。

方案二:squash merge + 分支归档(适合不需要长期保留develop分支的场景)

如果不需要develop分支长期存在,但要在Bitbucket留存提交记录用于回溯:

  • 完成squash merge到main后,给当前develop分支打归档标签:git tag archive/develop-20240520 develop(日期可按需修改)
  • 将标签推送到Bitbucket:git push origin archive/develop-20240520
  • 删除本地和远程的develop分支:git branch -D develop、git push origin --delete develop

后续需要回溯时,直接在Bitbucket的标签管理页面找到对应的归档标签,就能查看该分支当时的完整提交历史。

补充说明

squash merge的核心是“丢弃”原分支的提交历史,仅将变更内容合并到目标分支,这就导致Git无法识别原分支的提交已被处理,所以会持续显示差异。而--no-ff合并会生成包含原分支提交历史的合并节点,Git能正确识别这些提交已完成合并,不会再出现无意义的差异提示。

内容的提问来源于stack exchange,提问作者Dannid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:02:08