含Git子模块的仓库合并分支时如何同步更新子模块版本?
方案1:合并后快速同步子模块版本
- 合并完成停留在未提交状态时,直接执行
git submodule update bar,Git会自动将bar子模块切换到当前父仓库暂存区中记录的、来自main分支的zyx987提交,不需要手动输入哈希值 - 之后执行
git add bar即可将正确的子模块版本纳入提交,执行git commit完成合并即可
方案2:合并时自动同步子模块
该配置需要Git 2.14及以上版本支持
如果不想每次合并都手动执行update操作,可以通过配置实现合并自动处理子模块:
- 单次合并使用参数:执行
git merge --recurse-submodules=yes main,Git在合并过程中就会自动同步所有子模块到目标分支对应的提交,不会再出现子模块修改未暂存的情况 - 全局永久生效:执行
git config --global merge.recurseSubmodules true,之后所有仓库的合并操作都会默认自动同步子模块版本,无需额外加参数
原理解释
你之前手动add无效是因为:合并后父仓库的暂存区已经保存了main分支对应的子模块zyx987哈希,但你本地工作区的子模块还停留在原特性分支的abc123版本,直接add只会把工作区当前的旧版本哈希提交,所以需要先把子模块工作区同步到父仓库暂存区记录的哈希值,再执行add操作。
内容的提问来源于stack exchange,提问作者DPWork
相关产品推荐
相关产品推荐

