先给结论:不要按时间顺序回滚。先把这次修改产出的“可复用结果”列出来,再沿引用关系找谁在用这些结果,只有既直接依赖、又无法独立成立的部分才跟着撤销。下面用一个假设情境把判断过程走一遍。
假设你的博客两年前把侧栏的“专题入口”从手工链接改成了自动聚合,之后有几篇旧文在正文里写了“见侧栏专题”。现在你决定撤掉这个自动聚合,恢复手工链接。表面上看只是改回一个版块,真正麻烦的是:后续有内容、模板片段和跳转规则都建立在“侧栏会自动出现某个专题”这个前提上。
此时要做的不是把两年前那次提交整体回退,而是先判断哪些后续变更把这次修改当成了输入。判断标准只有一条:如果抽掉这次修改,后续变更还能不能独立成立。能独立成立的,保留;不能的,才进入撤销范围。
一次修改通常同时留下两类东西:一是改动动作,比如换了模板里的某段循环;二是改动结果,比如某个专题页开始被侧栏自动引用。撤销时真正要追的是结果,而不是动作。
实际动作:在版本记录里找到那次提交,只勾出它新增或改名的标识(模板变量名、路径片段、专题标识),不要勾具体行号。结果是你得到一份“结果清单”,而不是一份“改动清单”。下一步就是拿这份清单去搜引用。
拿着结果清单,在模板、内容库和跳转配置里搜索这些标识。搜到的每一处,按下面三类归档,处理方式完全不同。
这里最容易出错的是把伪依赖当成硬依赖。判断方法很简单:把被撤销的标识临时替换成一个不存在的名字,看哪些地方真的会坏。会坏的才是硬依赖。
假设你已经在测试环境里撤掉了自动聚合,并改掉了硬依赖。现在要确认没有漏掉软依赖。做法是:在撤销前后各记录一次同一组页面的表现,比较时把季节和搜索需求变化排除掉——比如不要拿大促周和淡季周直接对比,也不要把某天抓取量归零当成撤销正确的证据,抓取波动、采集延迟、日志采样差异都能造成同样的现象。
可用的对照信号:
如果对照发现某个页面既没有硬依赖报错,也找不到手工入口,那它很可能属于“仍然有价值但需要重新挂接”的部分。这时不要急着删,先给它补一条手工链接,再决定是否保留原专题。
走完前三步,撤销范围就清楚了。可以按下面的条件做取舍:
回到假设情境:侧栏自动聚合撤掉后,那几篇写了“见侧栏专题”的旧文属于软依赖。如果这些文章本身仍有搜索需求,就把指向改成手工专题链接;如果文章已经过时,就删掉那句指向,文章其余部分照旧。这样撤销的是一次改版,不是把两年里所有相关改动一起抹掉。
最后一步动作:把这次撤销的范围、保留的软依赖和补上的手工链接记进变更说明,下次再有人想动侧栏时,能直接看到哪些内容在依赖它。撤销完成不等于依赖消失,把依赖写清楚,才是这次操作真正的收尾。