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

非仓库所有者如何编辑Git子模块并推送修改?

处理Git子模块自定义修改并推送至自有仓库的正确流程

核心思路

先将原子模块仓库fork到自己的账号下,修改主项目中子模块的远程地址指向自己的fork仓库,之后在子模块内完成适配修改并推送到自己的仓库,最后更新主项目的子模块引用即可。

详细操作步骤

1. Fork原子模块仓库

前往原子模块所在的Git平台,点击fork按钮将仓库复制到自己的账号下,获取自己的仓库地址(例如git@github.com:your-username/submodule-repo.git)。

2. 修改主项目中子模块的远程地址

两种方式任选其一:

  • 方式一:通过命令行修改
    进入主项目根目录,定位到子模块文件夹后修改远程地址:
# 进入子模块目录
cd path/to/your/submodule
# 查看当前远程地址
git remote -v
# 替换为自己的fork仓库地址
git remote set-url origin git@github.com:your-username/submodule-repo.git
# 确认地址已更新
git remote -v
  • 方式二:修改配置文件
    编辑主项目根目录下的.gitmodules文件,找到对应子模块的url字段,替换为自己的fork仓库地址,然后执行同步命令:
git submodule sync

3. 在子模块内做修改并推送

在子模块目录中创建专属分支,完成适配修改后推送到自己的仓库:

# 创建并切换到自定义分支,例如feature/adapt-main-project
git checkout -b feature/adapt-main-project
# 进行代码修改
# 提交修改
git add .
git commit -m "适配主项目的调整:[简要说明修改内容]"
# 推送到自己的fork仓库
git push origin feature/adapt-main-project

4. 更新主项目的子模块引用

回到主项目根目录,更新子模块的指针指向自己推送的新提交:

# 查看子模块状态,确认有未提交的引用更新
git submodule status
# 提交主项目对子模块的引用变更
git add path/to/your/submodule
git commit -m "更新子模块引用为自定义适配分支的最新提交"
# 推送到主项目仓库
git push origin main

针对你遇到的问题的解决方案

  • 推送时提示无权限/覆盖原仓库:之前未修改子模块的远程地址,直接推送到了原作者的仓库,修改远程地址为自己的fork仓库后即可正常推送。
  • 执行git submodule update --remote --merge后子模块为空:该命令默认拉取原仓库的远程分支,修改远程地址后,执行git submodule update --init --recursive可重新拉取自己fork仓库的代码。
  • fork后子模块文件夹为空:未正确初始化子模块,修改.gitmodules的url后执行git submodule sync,再执行git submodule update --init --recursive即可拉取代码到子模块目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:45:01