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

如何在不重新添加子模块的情况下合并Pull Request?

解决方案分析

你的思路方向是对的,但具体步骤需要调整才能达到预期目的,下面详细拆解:

你的方法可行性

直接把F合并到分支B再变基到M的操作,如果不手动处理子模块冲突,还是会把F里的子模块内容带进来。因为合并F到B时,Git会默认保留F中存在的子模块相关文件(.gitmodules、子模块目录),变基只是把B的提交移到M的顶端,不会自动丢弃这些子模块内容。

但如果在合并/变基过程中手动解决冲突,丢弃F中所有和子模块相关的改动,只保留业务代码修改,那么最终合并到M后,历史里不会出现“移除→添加→再移除”的无效记录,也不会导致他人拉取时重新添加子模块。

更高效的操作步骤

不需要先合并到B再变基,直接基于主分支M处理更简单:

  1. 从当前M分支创建临时分支B:git checkout -b B M
  2. 执行合并但不自动提交:git merge F --no-commit
  3. 手动清理子模块相关内容:
    • 删除.gitmodules文件:rm .gitmodules
    • 删除所有子模块目录:rm -rf path/to/submodule1 path/to/submodule2 ...
    • 把这些删除操作加入暂存区:git add .
  4. 提交合并结果:git commit -m "Merge F's changes without restoring submodules"
  5. 把B分支合并到M:git checkout M && git merge B

这样处理后,M分支的最终状态完全没有子模块,合并提交里只包含F的业务改动,历史里也不会出现重新添加子模块的记录。

关于他人拉取的问题

只要M分支的最新提交中没有任何子模块相关文件(.gitmodules、子模块目录),其他开发者拉取最新的M分支时,Git会自动同步到无Submodule的状态,不会重新添加子模块。因为Git是基于当前提交的快照来构建工作区,只要最新快照里没有这些内容,就不会有拉取问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:10:12