修复 GitHub 中的“Ghost Folder”:将损坏的子模块转换为普通文件夹
Source: Dev.to
概览
如果你曾经把代码推送到 GitHub,看到一个带白色箭头且无法点击进入的文件夹图标,你并不孤单。这通常是因为该文件夹被当作 Git 子模块(通常是嵌套仓库的结果)处理。下面是一份逐步指南,教你将损坏的子模块转换为普通文件夹。
问题的本质
箭头图标表明 Git 认为该目录是子模块。这常在你在已有 Git 仓库中初始化新项目(例如使用 create‑react‑app 创建的 React 应用)时出现。新项目会带有自己的隐藏 .git 文件夹,导致父仓库把该目录当作独立的仓库。由于子模块在 GitHub 上没有正确链接,文件夹会显示为空且不可点击。
步骤 1:定位根项目
进入你的 monorepo 根目录。例如:
project-root/
├── backend_folder/ # Go 后端
│ └── main.go
├── my-app/ # Expo / React Native 应用
在 project-root/ 下运行以下命令,停止 Git 将 my-app/ 视为子模块进行跟踪:
git rm --cached my-app
此操作会从索引中移除子模块条目,但不会删除任何文件。
步骤 2:删除内部 Git 数据
删除子模块内部的隐藏 .git 目录(或文件),使其不再作为独立仓库存在:
Remove-Item -Recurse -Force my-app/.git
注意: 如果内部 Git 数据位于其他位置,请相应调整路径。
步骤 3:重新添加并推送
内部 Git 数据删除后,将文件夹重新添加到父仓库,提交并推送:
git add my-app/
git commit -m "Fixed: converted submodule to a normal directory"
git push origin
现在你的远程仓库会在单一的 Git 历史中存储所有文件和文件夹。
最终效果

感谢阅读!希望此技巧能帮助你解决 GitHub 上的 “幽灵文件夹” 问题。欢迎分享你的想法。