为何执行git push -u origin main仅推送单个文件夹至GitHub仓库?
问题原因
- client是独立Git仓库:你大概率在client文件夹里单独执行过
git init,生成了自己的.git目录。当根仓库执行git add .时,Git会把这种包含独立仓库的文件夹识别为子模块,不会把里面的文件加入根仓库,只会记录子模块的引用,所以GitHub上显示带箭头的空文件夹。 - 首次提交被标记为子模块:根仓库第一次提交时,Git检测到client的
.git目录,自动将其标记为子模块,后续git status就会提示它是带修改/未跟踪内容的子模块。
解决方法
方案1:把client合并为根仓库的一部分(推荐)
如果client不需要作为独立项目,直接把它变成根仓库的普通文件夹:
- 进入client文件夹,删除它的本地Git仓库:
cd client rm -rf .git cd .. - 回到根目录,重新添加client的所有内容:
git add client/ - 提交并推送:
git commit -m "添加client文件夹完整内容" git push origin main # 替换成你的分支名,比如master
方案2:保留client作为子模块(适合client是独立项目)
如果client本身是独立项目,需要保留子模块关联,得先把client的代码推到它自己的远程仓库,再更新根仓库的子模块引用:
- 进入client文件夹,推送自身代码到远程:
cd client git add . git commit -m "更新client代码" git push origin main # 替换成client仓库的分支名 cd .. - 回到根仓库,更新子模块引用并提交:
git add client git commit -m "更新client子模块引用" git push origin main # 替换成根仓库的分支名 - 后续拉取根仓库时,要同步子模块内容:
git clone <根仓库地址> git submodule init git submodule update # 或者克隆时直接拉取所有子模块 git clone --recurse-submodules <根仓库地址>
内容的提问来源于stack exchange,提问作者Pawan
相关产品推荐
相关产品推荐

