这套流程适合一个常见的个人网站场景。代码平时在开发分支上修改,确认无误以后再进入
main。Cloudflare Pages 监听仓库里的分支,为开发分支生成预览,为 main
部署正式网站。
同步 main
↓
本地修改 → 自动检查 → 提交开发分支 → Preview 验收
↓
合并 main
↓
正式部署
每个箭头都对应一次可以验证的状态变化。Git
状态确认分支是否放对,自动检查确认网站能否交付,Preview 负责检查真实部署,main
只负责发布。
本文使用这个网站当前的分支安排。
main 生产分支,对应正式网站
v3 当前开发分支
feat/* 新功能分支
fix/* 修复分支
如果你正在使用 feat/* 或 fix/*,把后文命令里的 v3 换成实际分支名即可。
开始修改前先把分支放对
进入项目,切换到开发分支,再看一眼工作区状态。
cd ~/Projects/knowledge-site
git switch v3
git status --short --branch
git fetch origin
git status --short --branch
会显示当前分支,也会列出尚未提交的文件。这里值得停几秒,
确认自己没有带着上一次留下的修改开始新工作。
git fetch origin 只更新远程分支信息,不会改动当前文件。远程 main
如果已有新提交, 可以把最新的生产版本接到开发分支上。
git rebase origin/main
rebase 没有冲突时会直接结束。出现冲突后,打开 Git 标出的文件,处理冲突内容,再继续。
git add 冲突文件
git rebase --continue
如果发现这次 rebase 不该继续,可以回到开始前的状态。
git rebase --abort
在本地运行网站
本地需要 Node.js 22 或更高版本。完整检查还会用到 Deno 2。第一次拉取项目时,先按 锁文件安装依赖。
npm ci
平时启动开发服务器只需要运行下面的命令。
npm run dev
浏览器访问
http://localhost:4321/。改了布局或交互以后,桌面和移动端都要看一遍。
开发页面能打开,只能说明本地服务器正常运行。类型、构建和站内链接还要交给提交前检查。
需要查看生产构建的结果时,先构建,再启动本地预览。
npm run build
npm run preview
提交前检查网站
这个项目把常用检查收进了一个命令。
npm run verify
它会检查格式、脚本语法、Astro 类型和生产构建,还会核对站内链接、搜索索引、草稿排除、 文章元数据、RSS、sitemap、robots、CSS 资源引用、标签 slug 冲突和 Git 空白字符。 看到命令成功结束,才能确认这次修改通过了项目现有的自动检查。
需要单独定位问题时,可以拆开运行。
npm run format:check
npm run check:scripts
npm run build
npm run validate:site
git diff --check
测试通过以后,再检查自己准备提交的内容。
git status --short
git diff
暂存文件以后,还可以查看最终将进入提交的差异。
git diff --staged
| 命令 | 要确认的事情 |
|---|---|
git status --short |
哪些文件被修改、删除或新增 |
git diff |
尚未暂存的内容改了什么 |
git diff --staged |
下一次提交会包含什么 |
这一步主要防止误加
dist/、.env、私人日记、公司资料和临时文件。自动检查关心网站能否
正常构建,提交者仍要判断每个文件是否应该公开。
提交并推送开发分支
确认差异以后,把修改提交到 v3。
git add .
git status --short
git commit -m "Update website content"
git push origin v3
git add .
会暂存当前目录下的全部改动,所以紧接着再看一次状态很有必要。提交说明应当写清
这次做了什么,例如 Update Git operations guide,以后查历史会省事很多。
这个项目的本地 v3 以上游 origin/main 为比较基准。推送时显式写出
origin v3, 可以保留这项设置。功能分支也应当写出实际分支名。
git push origin feat/分支名
推送以后,仓库里的 GitHub Actions 会安装依赖并重新运行
npm run verify。这项检查会 在 Pull Request 和非 main
分支的推送上触发。本地通过以后,仍要确认远程检查成功。
在 Preview 中检查真实页面
推送 v3、feat/* 或 fix/* 后,Cloudflare Pages 会生成 Preview
Deployment。它比本地
开发服务器更接近实际部署环境,也适合在发布前分享给别人检查。
至少打开这些页面。
/
/learn/
/blog/
/notes/
/chatter/
/about/
/search/
/tags/
/timeline/
/404.html
再打开一篇文章,检查正文、标签链接、搜索、主题切换和移动端导航。页面或路由有改动时, 还要确认构建输出、搜索索引、sitemap 和 robots 是否符合预期。
首页
├─ 导航与最近更新
├─ 栏目页
│ ├─ 文章列表
│ └─ 筛选与空状态
├─ 文章页
│ ├─ 正文与目录
│ └─ 标签与返回按钮
└─ 辅助入口
├─ 搜索与标签
├─ 时间线
└─ 404
把确认过的版本发布到 main
推荐在 GitHub 创建一个从 v3 到 main 的 Pull Request。自动检查通过,Preview
也确认 无误以后,再合并 Pull Request。main 收到新提交后,Cloudflare Pages
会自动部署正式网站。
确定需要从本地直接发布时,可以运行。
git fetch origin main
git push origin v3:main
直接推送少了 Pull Request
提供的检查记录和合并确认,更适合你已经明确核对过分支差异的 情况。GitHub Actions
的 push 检查排除了 main,所以直接发布前要确认本地 npm run verify
和开发分支最近一次远程检查都已通过。
线上出错时怎样回滚
优先使用
git revert。它会创建一个抵消旧改动的新提交,原来的提交记录仍然保留,出了
问题也容易继续追查。
git switch main
git pull --ff-only origin main
git log --oneline --decorate -20
git revert 提交号
npm run verify
git push origin main
Cloudflare Pages 收到这个新提交后会重新部署。你也可以在 Cloudflare Pages 的 Deployments 页面选择以前成功的生产部署并执行 Rollback。页面回滚能较快恢复网站,之后 仍建议在 Git 里补上对应的修复提交,让仓库记录与线上状态重新一致。
线上恢复以后,把 main 的新提交接回开发分支。
git switch v3
git rebase origin/main
| 当前情况 | 合适的动作 | 结果 |
|---|---|---|
| 文件尚未暂存 | git restore 文件路径 |
丢弃该文件的本地修改 |
| 文件误入暂存区 | git restore --staged 文件路径 |
保留修改,只取消暂存 |
错误已经进入 main |
git revert 提交号 |
增加一条回滚提交 |
| 线上需要先恢复 | Pages Rollback | 后续仍需补 Git 修复 |
改错文件时怎样恢复
恢复以前先看这个文件改了什么。
git diff -- 文件路径
丢弃尚未提交的修改,可以运行。
git restore 文件路径
文件已经暂存,但你想保留本地修改,只把它移出暂存区,可以运行。
git restore --staged 文件路径
需要取回旧提交里的单个文件,可以指定提交号。
git restore --source 提交号 -- 文件路径
这些命令处理的对象不同。执行前确认文件路径和当前差异,尤其要留意
git restore 文件路径 会丢弃该文件尚未提交的修改。
覆盖远程 main 前再确认一次
只有确认远程 main
上独有的提交可以舍弃时,才考虑改写它的历史。先比较开发分支与远程 生产分支。
git fetch origin main
git log --oneline --left-right v3...origin/main
确认差异以后,使用带租约检查的强制推送。
git push --force-with-lease origin v3:main
不要把它换成普通的 --force。--force-with-lease
会在远程分支已经被别人更新时拒绝
覆盖,能挡住一部分误操作。它仍然会改写历史,不能代替发布前的人工确认。
一次完整的日常操作
熟悉各步骤以后,日常流程可以收拢成下面这组命令。
cd ~/Projects/knowledge-site
git switch v3
git status --short --branch
git fetch origin
npm ci
npm run verify
git add .
git status --short
git commit -m "Update website"
git push origin v3
推送完成后查看 Cloudflare Preview。确认页面无误,再通过 Pull Request 合并到
main。
本地检查、远程预览和正式发布各解决一类问题,把这三处都走完,一次网站更新才算结束。
开始工作 switch → status → fetch → rebase
本地检查 dev → verify → diff
提交预览 add → diff --staged → commit → push
正式发布 Actions → Preview → Pull Request → main
故障恢复 定位提交 → revert → verify → push
