执行git merge origin/master后子模块提交未同步的原因咨询
子模块版本未同步的原因
- 父仓库是通过具体提交哈希来记录子模块版本的。你执行
git merge origin/master时,如果本地dev分支和origin/master在子模块的哈希记录上存在冲突,解决冲突过程中很可能误保留了本地旧的子模块哈希,而非origin/master中对应的新哈希,最终导致推送到远程dev后,子模块版本没跟上origin/master的状态。 - 另外,默认的
git merge只会处理父仓库里的子模块引用变更,不会自动拉取子模块的最新代码(需额外加--submodule参数),但你遇到的核心问题还是冲突解决时的哈希选择错误。
为什么
git pull --rebase origin master能解决问题 git pull --rebase origin master的本质是将本地dev分支的提交,逐个变基到origin/master的最新提交之上。这个过程中,Git会直接继承origin/master里的子模块哈希记录(只要你本地没有单独修改过子模块的引用),避免了merge时需要手动选择冲突版本的环节,自然就同步了子模块的正确版本。- 要是加上
--recurse-submodules参数,这个命令还会自动拉取子模块的对应代码;就算不加,只要父仓库里的子模块哈希同步正确,后续执行git submodule update就能拉到匹配的子模块版本。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

