如何将Git子模块B从仓库A中分离并保留原远程仓库?
更优的子模块分离方案(无需手动指定远程仓库)
你当前的命令存在冗余操作——子模块B本身就是一个完整的Git仓库,自带原远程仓库的配置,完全不需要重新执行git init和手动添加远程。更高效的步骤如下:
在仓库A的根目录,先强制解除A对B的子模块跟踪:
git submodule deinit -f B(加
-f参数是为了跳过确认,直接解除关联)将B从A的子模块配置文件(
.gitmodules)和Git索引中移除,确保A不再把B当作子模块:git rm --cached B进入B目录后,直接验证原远程仓库是否还存在:
cd B git remote -v你会发现原有的远程仓库配置完全保留,不需要任何额外操作。
为什么你的原有命令没必要?
git submodule deinit B只是让A不再跟踪B,但B本身的Git仓库结构和远程配置完全没被改动。- 重新执行
git init会重置B的仓库初始化状态,属于多余操作,甚至可能意外覆盖原有配置。 - 手动指定
<REMOTE_FOR_B>完全没必要,因为子模块B在被添加到A时,已经继承了自身的远程仓库配置。
内容的提问来源于stack exchange,提问作者Petr Křemen
相关产品推荐
相关产品推荐

