暂未播放
0:00
0:00

主题合并排错记:git 误删工作树、架构漂移与 CSS 三连击

1093 字
5 分钟
主题合并排错记:git 误删工作树、架构漂移与 CSS 三连击

主题更新一直嫌麻烦不想动,这次终于把上游合并进来了。本以为最麻烦的是解冲突——平时也就加了点小功能。结果冲突只占开头一小段,后面全是排错:git 把工作树删了、上游大改导致私有功能挂不上、类型被悄悄吞、副标题的 CSS 连着炸三回,一整天就这么搭进去了。趁热记一笔,免得下次又踩。

git merge —abort 把工作区删了#

合并到一半想回退,手比脑子快,直接 git merge --abort——本以为会回到合并前。结果工作树两百多个文件全没了git status 一片 D,但索引还在。后来才摸清,git checkout <分支>git rm <file> 这几个在这环境里都会触发同样的”物理删除”,我三个全中。

恢复倒不难,一条底层管道把索引里的 blob 重新写回磁盘就行:

Terminal window
git checkout-index -a -f # 把索引里所有 blob 重新写回磁盘

跑完 git status -s 归零、git diff HEAD --stat 为空,文件一个没少。

上游重构,我的私有功能挂不上了#

这关最费脑子。上游把横幅/壁纸/侧栏整套重写了,引入 WallpaperSectionSidebarColumngetBannerVisibilityState(),还把我依赖的那几个 isBannerMode/isFullscreenMode 布尔变量删了。

我那一言横幅正好挂在这几个旧变量上,于是冲突变得很别扭:两边各自引用了对方才有的变量——上游代码引用我这边已经删的,我的代码引用它那边刚删的。哪一段单独取都不对,干脆谁都别取,整段重写

最后手动把一言重挂到新的 banner 模型上:渲染走 BannerHomeTextOverlay,逻辑塞进 MainGridLayout 的新薄壳。也就是换个挂点。

这事给我提了个醒:私有功能尽量挂在配置入口,别依赖主题内部的实现细节(布尔变量、DOM 结构这些)。不然上游每重构一次,我就得手动重挂一次。

类型被”自动合并”偷偷吞了#

这个最隐蔽。src/types/siteConfig.ts 根本不在冲突清单里,git 自动合并时直接拿上游版本覆盖了我私改的部分——我加的 anime? 类型块没了,构建报 ts(2353)

所以现在合完我第一件事就是跑 astro check,把被吞的私有类型补回来。这坑藏得深,不跑检查根本发现不了。

CSS 三连击,全卡在副标题#

一言副标题在新布局里连着出了三个问题,一个比一个隐蔽。

第一个,一言被顶到标题上方。 旧布局给 .banner-subtitle 加了 position: absolute; top: 0,新上游是 flex 列布局,这一下直接把它粘到 overlay 顶部,跑到标题上面去了。修法是把绝对定位收窄到 .banner-subtitle-wrap 容器内,普通 .banner-subtitle 回归文档流。

第二个,副标题消失后主标题上下跳。 打字机删空、加载中、回退无数据时,副标题高度塌成 0,上方主标题跟着跳。给一言槽恒定预留一行高度就稳了:

#banner-subtitle[data-hitokoto="1"],
#banner-subtitle-fallback {
min-height: 1.4em;
}

这选择器只作用一言模式(data-hitokoto),不碰上游默认副标题——我一直守着一条线:私有功能不能影响上游默认行为

第三个,链接图标被挤来挤去。 回退槽初始带 Tailwind 的 hiddendisplay:none),回退逻辑里用 display="" 去还原,结果被 .hidden 吃掉,回退槽永远不出现。改成内联 display="block" 才生效。

这三个坑的共同教训:改布局前先看清楚当前 DOM 结构——是不是 flex、背后有没有 Tailwind class 在干扰,比闷头写 CSS 重要得多。

还有个插曲:reset —hard 清了一整天#

中途手滑了一次。想放弃一部分改动,git reset --hard HEAD 一敲,一整天没提交的私有改动全没了。还好 git add 过的东西其实还在对象库里没真消失:

Terminal window
git fsck --unreachable --no-reflogs # 列出悬空 blob
git cat-file -p <hash> | grep "特征串" # 按文件特征定位是哪个文件

靠这两条把 git add 过的文件一个个认领了回来。没 add 过的部分是真没了,只能认栽重写——也算买个教训,改动再不满意,先 add 一把再说。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
主题合并排错记:git 误删工作树、架构漂移与 CSS 三连击
https://x1anyu.cn/posts/9/
作者
羡鱼
发布于
2026-08-22
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
羡鱼
临渊空慕水中鱼, 不如携风自渡河.
分类
标签
最新动态
站点统计
文章
14
分类
7
标签
35
总字数
19,969
运行时长
0
最后活动
0 天前
文章目录