如何无需推送即可同步Git子模块的本地修改?
无需推送即可同步Git子模块本地修改的方法
临时使用未提交的子模块改动
如果只是临时在主项目里用子模块的本地修改,不用提交也不用推送到远程,其实主项目本来就能直接访问子模块目录里的修改文件——毕竟子模块就放在主项目的工作区中。
但要是你执行了git submodule update,Git会尝试把子模块重置回主项目记录的旧版本,这会覆盖你的本地改动。这时候可以用带参数的更新命令保留修改:
git submodule update --merge
这个命令会把你的本地修改合并到主项目记录的子模块版本上,有冲突的话手动解决即可。
本地长期记录子模块修改(无需推远程)
要是想让主项目一直用子模块的本地修改,切换分支或更新后也不丢失,不用推送到GitHub,按下面步骤操作:
- 进入子模块目录,切换到你的本地开发分支(别停留在默认的分离头指针状态):
cd path/to/your/submodule git checkout main # 换成你的实际分支名,比如dev - 在子模块里完成修改后,提交到本地仓库(不用推送到远程):
git add . git commit -m "子模块本地修改" - 回到主项目目录,Git会检测到子模块的提交版本已更新,执行命令更新主项目对子模块的引用:
cd ../ git add path/to/your/submodule git commit -m "更新子模块到本地提交版本" - 之后不管你切换主项目分支还是执行
git submodule update,主项目都会使用子模块的本地提交版本,完全不用推送到远程仓库。
额外配置:让子模块默认跟踪本地分支
不想每次主项目拉取代码后,子模块自动切换到远程指定版本?可以修改配置让它跟踪你的本地分支:
git config -f .gitmodules submodule.<你的子模块名>.branch <本地分支名>
之后执行git submodule update --remote时,会拉取本地分支的最新提交,而不是远程分支的版本。
内容的提问来源于stack exchange,提问作者pm100
相关产品推荐
相关产品推荐

