GitHub旧PR分支更新遇子模块未合并问题,求解决方法
解决子模块冲突并完成PR合并的方法
首先,不建议直接删除子模块文件夹——Git会在索引和.gitmodules文件中追踪子模块的状态,直接删除文件夹会导致索引与本地文件状态不一致,反而引发更多冲突。
以下是正确的操作步骤:
1. 清理未完成的合并状态
如果之前拉取master的合并操作未完成,先终止当前的合并流程:
git merge --abort
确保你的PR分支回到干净的可操作状态。
2. 拉取最新的master分支
同步远程仓库的最新master代码:
git fetch origin master
3. 合并(或变基)master到你的PR分支
选项A:使用合并(保留原提交历史)
执行合并命令,触发子模块冲突处理:
git merge origin/master
选项B:使用变基(整理成线性提交历史)
如果偏好更整洁的提交记录,可使用变基:
git rebase origin/master
4. 处理子模块冲突
执行上述步骤后,Git会提示子模块的冲突状态(通过git status可查看),按以下方式处理:
- 接受master分支中的子模块配置:
git checkout origin/master -- path/to/submodule .gitmodules - 初始化并更新所有子模块(包括嵌套子模块):
git submodule update --init --recursive
如果仍存在Skipping unmerged submodule报错,可手动清理索引中的子模块残留状态:
# 移除索引中冲突的子模块条目 git rm --cached path/to/submodule # 重新拉取master的子模块配置 git checkout origin/master -- path/to/submodule .gitmodules # 再次初始化子模块 git submodule update --init --recursive
5. 完成合并/变基并推送
- 如果用合并:解决冲突后执行
git add .,然后git commit完成合并,最后推送更新到你的PR分支:git push origin your-pr-branch - 如果用变基:解决冲突后执行
git add .,然后git rebase --continue,完成后强制推送(因为变基修改了提交历史):git push origin your-pr-branch --force-with-lease
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

