执行git submodule update --init --force --remote生成diff文件如何解决
问题根源
你看到的diff内容不是Git自动生成的实体文件,是主仓库的子模块版本校验提示:
主仓库会固定记录每个子模块对应的绑定commit哈希,你执行git submodule update --init --force --remote时,会强制将子模块更新到对应远程分支的最新commit,此时子模块当前HEAD和主仓库记录的旧哈希不一致,Git就会输出这段diff提示变更。
你误以为是多余文件删除子模块目录后,Git会自动按照主仓库现存的旧哈希重新拉取子模块,自然就切回旧版本了。
解决方法
分两种场景按需操作:
场景1:需要保留子模块最新版本,同步更新主仓库的子模块绑定记录
- 进入主仓库根目录,执行
git add [子模块路径],对应你的示例路径就是git add app/Services/Payment - 提交变更:
git commit -m "更新Payment子模块到最新commit" - 后续其他协作者拉取主仓库最新提交后,执行
git submodule update就能自动拉到对应新版本的子模块,不会再出现这段diff提示
场景2:不需要更新子模块,希望子模块保持主仓库绑定的旧版本
- 不要手动删除子模块目录,直接在主仓库根目录执行
git submodule update,Git会自动将子模块切回主仓库记录的旧commit,diff提示会直接消失,不需要额外清理
注意事项
- 不要直接修改/删除子模块目录来调整版本,所有子模块版本变更操作都通过Git的子模块命令执行
- 如果子模块内有自己的未提交修改,执行子模块更新前先到子模块目录提交或者暂存改动,避免内容丢失
内容的提问来源于stack exchange,提问作者Omar Abdelaziz
相关产品推荐
相关产品推荐

