Git合并myStudy分支到main分支时提交报错如何解决
问题根因
报错核心来自两点:
- 目录
Modern-JavaScript-Deep-Dive是当前仓库挂载的Git子模块,子模块内部的未跟踪内容不会被主仓库的git add .命令识别,因此执行提交时会提示没有可提交的变更,同时一直弹出子模块内容未处理的警告。 - 你之前的操作流程存在逻辑错误:切到
myStudy分支后执行git push origin main不符合Git分支操作的逻辑,也无法完成分支合并的目标。
排查修复步骤
第一步:先处理子模块的未跟踪内容
根据你是否需要保留子模块内的改动,二选一操作即可:
- 不需要保留子模块临时改动:在主仓库根目录执行以下命令,清除所有子模块内的未跟踪文件,同时将子模块指针恢复到主仓库记录的版本:
git submodule foreach --recursive git clean -fd git restore Modern-JavaScript-Deep-Dive
- 需要保留子模块内的改动:先进入子模块目录完成子模块内部的提交,再回到主仓库即可识别到子模块的版本变更:
cd Modern-JavaScript-Deep-Dive git add . git commit -m "提交子模块内的对应改动" cd ..
第二步:同步本地main分支的领先提交
子模块状态处理完成后,先切回main分支,把本地比远程多的4个提交推送到远程,保证本地和远程main分支基线一致:
git checkout main git push origin main
第三步:完成myStudy到main的分支合并
- 切回
myStudy开发分支,将分支上的所有代码改动提交完成,推送到远程仓库:
git checkout myStudy # 若分支上还有未提交的常规代码改动,正常执行add、commit即可,子模块状态处理完后不会再弹出之前的报错 git add . git commit -m "提交myStudy分支的开发改动" git push origin myStudy
- 切回
main分支,执行合并操作:
git checkout main git merge myStudy
- 如果合并过程出现代码冲突,按照提示手动解决冲突文件后,执行
git add [冲突文件名]、git commit完成合并提交,最后执行git push origin main把合并后的main分支推送到远程,整个流程就完成了。
注意:处理子模块状态时优先使用主仓库的git submodule系列命令操作,不要直接在子模块目录随意执行重置类命令,避免子模块版本指针混乱。
内容的提问来源于stack exchange,提问作者Hyejung
相关产品推荐
相关产品推荐

