
AI 改页面翻车后,才发现 Git 分支根本不够用
最近在做一个项目的新页面改版时,我踩了一个很典型的坑。
原本需求非常简单:现有页面已经能正常使用,主分支也要继续保持稳定。在新版页面没有完全改完之前,我并不想动主分支上的旧页面。因为页面改版不像修一个小 bug,它往往会涉及整体视觉风格、布局结构、图片资源、组件拆分、响应式适配,甚至还可能反复推翻重来。
所以一开始,我的想法也很自然:既然不想影响主分支,那就创建一个新分支,让 AI 在新分支里改版。等新版页面全部完成、测试通过、视觉效果确认后,再统一合并回主分支。
听起来这套流程很正常,也很符合 Git 的基本使用方式。
但真正开始用 AI 做页面改版以后,我才发现,问题并没有想象中那么简单。
一开始只是想用分支隔离页面改版
当时我的操作思路很直接。
主分支继续保留现有页面,改版工作放到一个新的分支里。比如从main拉出一个ui-redesign分支,然后让 AI 在这个分支里重做首页、调整配色、优化卡片、替换背景图、重新设计交互细节。
这种方式在传统开发里是很常见的。一个新需求开一个 feature 分支,一个 bug 修复开一个 fix 分支,一个页面改版开一个 redesign 分支,看起来没有任何问题。
但问题出在:这次不是我手动慢慢改,而是让 AI 参与改版。
AI 改页面和人手动改页面最大的区别是,它的改动速度非常快,而且改动范围有时候会比你预期大得多。你只是让它“重新设计首页”,它可能不仅会改page.tsx,还会改组件、样式文件、布局结构,甚至会替换public目录里的背景图、Logo、卡片图、角色图和装饰图。
一开始我并没有特别在意这个问题。直到后来我发现,public里的图片资源被替换了。
这时候才意识到,单纯创建一个分支,并不能完全解决 AI 改版时的工作区污染问题。
真正的问题不是分支,而是工作区
很多人理解 Git 分支时,会默认认为:只要创建了新分支,就不会影响主分支。
这个理解只对了一半。
分支确实可以隔离提交历史,但如果你仍然在同一个项目目录里工作,那么你的物理工作区其实还是同一个。你只是在同一个文件夹里不断切换不同分支对应的文件状态。
比如你的项目目录是:
~/projects/glownest-next
你在这个目录里从main切到ui-redesign,然后让 AI 去改页面。这个过程中,所有文件仍然在同一个物理目录里被修改,包括src、app、components、styles,也包括最容易被忽略的public。
如果 AI 把新版首页的背景图直接写到了:
public/images/home-bg.png
而旧版首页原本也在使用这个文件,那就很容易出现资源覆盖问题。
理论上,如果这个文件被 Git 跟踪,并且你已经提交,分支切换时 Git 能恢复不同分支对应的文件版本。但真实项目里,经常会有更复杂的情况:有些图片是未跟踪文件,有些资源是 AI 新增的,有些文件被覆盖后还没提交,有些路径被多个页面共用,还有开发服务器和浏览器缓存参与进来。
最后你会发现,明明是在新分支里做页面改版,但旧页面看起来也像被影响了。不是 Git 分支失效了,而是你把所有试验都放在了同一个工作区里。
这就是这次踩坑的核心。
分支隔离的是版本历史,worktree 隔离的是开发现场。
public 目录为什么特别容易被 AI 改乱?
在前端项目里,public目录是一个非常特殊的地方。
很多静态资源都会放在这里,比如 Logo、背景图、图标、字体、插画、角色头像、卡片封面、JSON 配置等。页面引用这些资源时,路径通常非常直接:
<img src="/images/home-bg.png"/>
或者:
background-image:url('/images/hero-bg.png');
这类引用方式很方便,但也带来一个问题:如果 AI 在改版时直接覆盖了同名文件,旧页面和新版页面都可能受到影响。
尤其是 AI 很容易采用“就地优化”的方式。你让它把首页改得更高级,它可能会直接替换原来的hero-bg.png;你让它重新设计卡片,它可能会直接覆盖原来的card-bg.png;你让它换一套品牌视觉,它可能会直接替换 Logo 或背景图。
对 AI 来说,这样做是为了完成改版目标。但对真实项目来说,这种方式非常危险。因为旧页面还没下线,主分支还要保持稳定,新版页面还在试验阶段,资源不应该直接覆盖。
页面代码的变更,你通常能通过 diff 看出来。但图片资源的替换,很多时候要等页面跑起来以后才会发现。尤其当图片文件名没变,只是内容变了,肉眼 review diff 时很容易忽略。
所以 AI 做页面改版时,public目录一定要特别小心。
为什么页面改版比普通功能开发更适合 worktree?
普通业务开发里,一个分支通常已经够用了。比如新增一个接口、修一个 bug、补一个字段,改动范围相对清楚,最终也比较容易 review。
但页面改版不一样。
页面改版通常是一种试验型工作。你可能会换色系,换布局,换图片,换动效,换首页结构,甚至换整套视觉语言。这个过程里,很多改动一开始并不确定。你可能让 AI 做出一个版本,觉得不满意,又让它换一个方向。反复几轮以后,项目里很容易出现大量临时组件、临时图片、废弃样式和中间版本资源。
如果这些试验都发生在主项目目录里,即使你使用的是新分支,也会带来很强的心理负担。你会担心 AI 是否动到了旧页面资源,是否替换了公共图片,是否影响了当前可用的版本,是否留下了一堆临时文件。
而 worktree 的好处就在这里。
它可以让同一个 Git 仓库在本地同时拥有多个独立工作目录。主分支仍然放在原来的目录里,新版页面改版放在另一个目录里。两个目录各自有自己的public、src、app、components、开发服务器和缓存环境。
这样一来,AI 就可以在改版目录里大胆试验,而主分支目录完全不受影响。
这才是真正意义上的“开发现场隔离”。
worktree 的正确使用方式
假设你的主项目目录是:
~/projects/glownest-next
当前主分支是main。在开始改版之前,第一步一定是先确认主分支工作区是干净的:
git status
如果有未提交内容,先提交或者 stash。不要在工作区混乱的情况下继续开改版任务,否则后面很难判断哪些改动属于旧任务,哪些改动属于新版页面。
接着拉取最新主分支:
git checkout main
git pull origin main
然后使用 worktree 创建一个独立的改版目录:
git worktree add ../glownest-next-ui-redesign -b ui-redesign main
这条命令的意思是:基于main创建一个新分支ui-redesign,并把这个分支 checkout 到一个新的本地目录:
../glownest-next-ui-redesign
此时你本地会同时存在两个目录。
一个是主分支目录:
~/projects/glownest-next
另一个是改版分支目录:
~/projects/glownest-next-ui-redesign
接下来进入改版目录:
cd../glownest-next-ui-redesign
安装依赖并启动项目:
pnpm install
pnpm dev ----port 3001
如果主分支项目仍然运行在3000端口,那么你就可以同时打开两个页面:
http://localhost:3000
查看旧版页面。
http://localhost:3001
查看新版页面。
这时候你就不需要来回切分支,也不需要反复重启项目。旧版和新版可以同时打开、同时对比,非常适合页面改版。
给 AI 的指令必须明确资源边界
使用 worktree 以后,风险已经小很多,但这并不意味着可以完全放开让 AI 随便改。
AI 页面改版仍然需要明确边界。尤其是静态资源,必须提前告诉 AI 不要覆盖旧资源。
我现在更推荐在改版 worktree 里给 AI 这样的指令:
当前目录是页面改版专用 worktree,不是主分支目录。
本次任务是重新设计首页视觉效果,保留现有业务逻辑和路由结构。
允许修改:
1. 首页相关页面组件
2. 首页相关样式文件
3. 新增改版专用组件
4. 新增改版专用静态资源
禁止修改:
1. 不要修改接口调用逻辑
2. 不要修改登录、鉴权、支付、订单等业务模块
3. 不要覆盖 public 目录下已有同名图片
4. 不要删除旧页面资源
5. 不要修改主分支目录中的任何文件
资源规则:
所有新增图片、背景图、图标、装饰图,统一放到 public/redesign/ 目录下,并使用新的文件名。
不要覆盖 public/images/、public/assets/、public/logo.png 等旧资源。
完成后请输出:
1. 修改了哪些文件
2. 新增了哪些静态资源
3. 是否覆盖了已有资源
4. 是否保留旧页面可回退
5. 如何合并回主分支
这段提示词的核心不是让 AI 做得更快,而是让 AI 改得更可控。
AI 很擅长执行,但它不知道你的工程风险偏好。你必须告诉它哪些地方可以试验,哪些地方不能碰,哪些资源必须隔离,哪些逻辑必须保留。
这就像给 AI 划出一个施工区域。
worktree 是物理隔离,提示词是行为边界。
两者都需要。
新资源一定要有独立命名空间
这次踩坑以后,我对页面改版里的静态资源有一个非常明确的建议:所有新资源都应该放到独立目录里。
比如:
public/redesign/
更进一步,可以按页面拆分:
public/redesign/home/
public/redesign/cards/
public/redesign/icons/
public/redesign/backgrounds/
这样做有几个明显好处。
第一,新旧资源不会混在一起。你一眼就能看出哪些资源是为新版页面准备的。
第二,不会覆盖旧页面资源。旧页面原来引用的public/images/home-bg.png不会被新版资源替换。
第三,review 更清楚。PR 里新增了哪些改版资源,一眼就能看出来。
第四,如果改版方向被推翻,可以直接删除整个public/redesign目录,清理成本非常低。
第五,合并回主分支时,可以更从容地决定哪些资源保留,哪些资源丢弃。
很多项目后期资源混乱,就是因为一开始没有命名空间。新版、旧版、临时图、生成图、测试图全部放在同一个目录里,最后没人知道哪个文件还在用,哪个文件可以删。
AI 改版时更要避免这个问题。
因为 AI 生成资源太快了,如果没有规则,很容易把public变成垃圾场。
新页面也不要一开始就覆盖旧页面
除了静态资源,页面入口也建议先隔离。
比如原来的首页是:
app/page.tsx
如果新版还没有完全确认,就不要一开始直接覆盖它。更稳的方式是先新建一个临时页面:
app/redesign/page.tsx
这样新版可以通过/redesign单独访问。旧首页继续保留,新首页独立预览,两个版本可以同时存在。
如果项目不是 Next.js,而是 React Router 或 Vue Router,也可以先加一个临时路由:
/redesign-home
这个做法非常适合页面改版。
因为页面设计往往不是一次到位。第一版可能色系不对,第二版可能布局不对,第三版可能移动端不行。你需要不断试验和对比。如果一开始就覆盖旧页面,每一次试错都会影响现有可用版本。
先让新版页面独立存在,等视觉、功能、适配都确认后,再替换正式入口。
这才是更稳的前端改版方式。
worktree 让新旧页面对比变得非常自然
页面改版最重要的工作之一,就是对比。
你不能只看新版是不是“更好看”。你还要确认新版有没有丢失旧版功能,有没有遗漏入口,有没有破坏移动端,有没有改变用户熟悉的路径,有没有影响首屏加载,有没有把原来的核心信息弱化掉。
如果只靠一个目录来回切分支,对比体验非常差。你要切分支、重启项目、刷新页面,然后凭记忆比较两个版本。这对视觉判断很不友好。
worktree 则完全不一样。
你可以让主分支运行在3000端口,让改版分支运行在3001端口。两个页面并排打开,左边旧版,右边新版。你可以直接对比首屏、卡片、按钮、图片、字体、移动端布局。
这种对比方式非常适合和 AI 协作。
你可以看完新版后,继续给 AI 反馈:
“新版首屏情绪更强,但旧版的功能入口更清晰,需要把旧版的核心入口保留下来。”
“新版图片风格更统一,但卡片信息密度太低,需要提高一点内容承载能力。”
“新版按钮更好看,但 CTA 不够突出,主按钮和次按钮层级还需要再拉开。”
这种反馈,比单纯说“再优化一下”有效得多。
因为你是在真实对比中给出具体反馈。
改版完成后,不要手动复制文件合并
很多人页面改版完成后,会下意识地手动复制文件回主项目目录。
这不是一个好习惯。
更推荐走标准 Git 流程。
在改版 worktree 里先检查改动:
git status
gitdiff
确认没有误删旧资源、没有覆盖不该覆盖的图片、没有修改业务逻辑以后,提交改版分支:
git add .
git commit -m "feat: redesign home page"
然后推送到远程:
git push origin ui-redesign
接下来通过 PR 或 MR 合并到主分支。
合并前重点 review 几类内容:第一,public目录有没有覆盖旧资源;第二,是否误改接口调用、登录鉴权、订单支付等业务逻辑;第三,是否新增了无用图片或临时文件;第四,移动端适配是否完整;第五,构建和类型检查是否通过。
页面改版不是只看视觉效果。
最终能不能合并,还是要看工程质量。
所以合并前至少应该跑:
pnpm build
如果项目有类型检查,也要跑:
pnpm typecheck
如果项目有 lint,也要跑:
pnpm lint
确认通过后,再考虑合并。
改版结束后如何清理 worktree
当新版页面已经合并,或者这个改版方案决定废弃,就可以清理 worktree。
先回到主项目目录:
cd~/projects/glownest-next
查看当前 worktree:
git worktree list
如果确认改版目录不再需要,可以删除:
git worktree remove ../glownest-next-ui-redesign
如果本地分支也不需要了,可以删除:
git branch -d ui-redesign
如果远程分支也要删除:
git push origin --delete ui-redesign
worktree 的好处是,整个改版实验环境可以干净移除。不会在主项目目录里留下大量临时资源,也不会让你事后分不清哪些文件属于改版试验,哪些文件属于主分支。
这对 AI 改版尤其重要。
因为 AI 很容易生成中间文件和临时资源。如果没有隔离目录,后期清理会非常痛苦。
这次踩坑真正的教训
这次页面改版最大的教训,不是“不要用分支”。
分支当然要用。
真正的教训是:当 AI 参与页面改版时,仅仅使用分支还不够。因为 AI 的改动不只是代码提交,它会影响整个开发现场,包括静态资源、页面入口、未跟踪文件、开发服务器、缓存和临时资源。
分支解决的是版本管理问题。
worktree 解决的是工作区隔离问题。
页面改版这种任务,天然需要大量试验、反复对比和资源替换,因此更适合 worktree。主分支目录继续保持稳定,改版分支目录用来大胆试错。AI 的所有试验都发生在改版目录里,旧页面不会被打扰,public 资源不会互相覆盖,新旧版本也可以同时运行对比。
这才是更适合 AI 改版页面的工作方式。
最后
AI 让页面改版变快了,但也让改版风险变大了。
以前人手动改页面,可能一天只改几个文件;现在 AI 一次就可能改几十个文件,还会顺手替换图片、重写组件、调整样式、改文案、加动效。效率是提高了,但如果没有工程隔离,项目很容易被改乱。
所以,AI 改页面时,不要只关注提示词怎么写,也不要只关注页面最终好不好看。更重要的是,先给 AI 一个安全的改版环境。
主分支保持稳定。
改版分支使用 worktree。
新资源放到独立目录。
新页面先用临时路由预览。
新旧版本同时启动对比。
改版完成后通过 PR review 合并。
这套流程看起来比直接切分支麻烦一点,但它能避免很多后期问题。尤其当 AI 开始参与真实项目改版时,worktree 几乎会变成一个非常重要的安全边界。
如果你也准备让 AI 重新设计项目页面,不建议一上来就在主目录里切个分支就开干。
更稳的方式是:
先开 worktree,再让 AI 改版。
这样旧页面继续稳定,新页面大胆试验,最后再把真正满意的结果合并回主分支。
这才是 AI 时代更适合前端页面改版的工程流程。
今天就讲到这里,如果有问题需要咨询,大家可以直接留言或扫下方二维码来知识星球找我,我们会尽力为你解答。

快速搭建属于您的专属官网,就上TechWisdom(www.techwisdom.cn)!
提供100+ 精美模板,支持二级域名和独立域名配置,可根据需求进行个性化定制开发。首次上线还有专业团队协助上传内容,轻松打造高效、专业、吸睛的官网!立即访问网站,选择您心仪的模板,开启建站新体验吧!



作者:路条编程(转载请获本公众号授权,并注明作者与出处)
夜雨聆风