多分支场景下子模块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
相关产品推荐
相关产品推荐

