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

多分支场景下子模块stage分支推送至父仓库对应分支失败求助

解决父仓库stage分支与子模块stage分支同步问题

问题根源

你的master分支脚本能正常工作,是因为Git子模块默认跟踪子模块的master分支。当父仓库处于master分支时,git submodule update --remote会自动拉取子模块master分支的最新提交,父仓库提交子模块的新哈希后推送到远程,完成同步。但在stage分支下,子模块默认还是跟踪master分支,所以你更新子模块stage分支的代码后,父仓库stage分支并没有捕获到子模块的哈希变更,自然无法在GitHub上显示。

解决步骤

1. 配置子模块跟踪stage分支(仅需执行一次)

先切换到父仓库的stage分支,然后配置子模块跟踪其自身的stage分支(替换submodule_path为你的子模块实际目录名):

git checkout stage
git config -f .gitmodules submodule.submodule_path.branch stage
# 提交.gitmodules的变更到父仓库stage分支,确保后续克隆自动生效
git add .gitmodules
git commit -m "Configure submodule to track stage branch"
git push origin stage

2. 编写stage分支的同步脚本

参考master分支的脚本,修改为适配stage分支的版本:

#!/bin/bash
git init
# 克隆父仓库的stage分支并拉取子模块
git clone --recurse-submodules -b stage https://github.com/username/file.git
cd file
# 拉取子模块stage分支的最新代码
git submodule update --remote
# 提交父仓库中子模块的哈希变更
git commit -a -m "Update submodule to latest stage commit"
# 推送到父仓库stage分支
git push -u origin stage

3. 手动同步流程(临时操作时用)

如果不想用脚本,手动执行以下步骤也能完成同步:

  • 切换到父仓库stage分支:git checkout stage
  • 更新子模块到stage分支最新:git submodule update --remote
  • 提交父仓库变更:git commit -a -m "Sync submodule stage to parent stage"
  • 推送到远程:git push origin stage

为什么之前的命令没生效

  • git push -u origin stage只是推送父仓库的stage分支,但如果父仓库里子模块的哈希值没有更新(因为子模块没拉取stage分支的最新代码),GitHub上不会显示任何变更。
  • git config push.default current/upstream只是修改了Git的默认推送分支规则,但核心问题是子模块的跟踪分支未配置为stage,父仓库根本没捕获到子模块的变更,所以推送也没用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:50:25