解决Git 典型的子模块冲突
Git 陷入了一个典型的子模块冲突。
简单来说:themes/hugo-theme-m10c 文件夹目前被 Git 视为一个“独立的项目”。因为你修改了配色的 config 或者主题代码,Git 发现这个子项目有改动,但它没有权限替你把这些改动提交到别人的仓库里,同时也导致你的主项目(my-hugo-blog)被卡住。
请按照以下步骤,用最彻底的**“合并法”**解决:
第一步:强行“吞并”主题文件夹
我们要让 Git 停止把这个主题当成子模块,而是把它当成你自己的普通文件夹。
在你的电脑终端输入这三行命令:
Bash
1. 删除子模块的索引(注意:末尾不要带斜杠 /)
git rm -r –cached themes/hugo-theme-m10c
2. 删除那个该死的 .git 标识(这是让 Git 误以为它是子项目的根源)
Windows 用户执行:
rmdir /s /q themes\hugo-theme-m10c.git
Mac/Linux 用户执行:
rm -rf themes/hugo-theme-m10c/.git
3. 此时再添加,Git 就会把它当成普通文件夹处理了
git add .
第二步:提交并强制推送
现在 Git 应该能识别到你的所有改动了(包括文章和主题配色)。
Bash
1. 再次尝试提交
git commit -m “彻底修复主题冲突并发布文章”
2. 推送到 GitHub
git push origin main
第三步:去 Vercel 检查
这次 git push 成功后,由于你把主题代码直接“背”在了自己的仓库里,Vercel 部署时再也不需要去连接外部子模块,成功率是 100%。
打开你的 GitHub 仓库网页,确认 themes/hugo-theme-m10c 文件夹不再带有一个“白色小箭头”图标。
刷新 Vercel 的 Deployments 页面,你应该能看到一个正在进行的 Building。
为什么之前一直失败?
因为只要 themes/hugo-theme-m10c 文件夹里存在一个 .git 文件夹,主项目的 git add . 就无法跨越它去捕捉里面的改动。这就像你在一个保险柜里又放了一个保险柜,主项目的钥匙打不开里面的锁。