<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Landen&apos;s Space</title>
    <link>https://knowledge.landen.dpdns.org/</link>
    <description>Landen 的个人空间，整理知识，记录学习心得、实践和生活工作随记。</description>
    <language>zh-CN</language>
    <lastBuildDate>Thu, 17 Sep 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>上班小插曲</title>
      <link>https://knowledge.landen.dpdns.org/posts/chatter/a-small-mishap-on-the-way-to-work/</link>
      <guid isPermaLink="true">https://knowledge.landen.dpdns.org/posts/chatter/a-small-mishap-on-the-way-to-work/</guid>
      <pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Landen</dc:creator>
      <author>jiasu1466@gmail.com (Landen)</author>
      <updated>2026-09-17T00:00:00.000Z</updated>
      <category>杂谈</category>
      <description>一次正常的上班，发生了小插曲，第一次出现这样情况，但幸好工作人员及时协助</description>
      <media:content url="https://knowledge.landen.dpdns.org/images/chatter/A%20small%20mishap.webp" medium="image" />
      <content:encoded><![CDATA[<h3 id="一个小插曲发生在了上班途中">一个小插曲发生在了上班途中😃😃😃</h3>
<p>生活好像总会给你开点小玩笑，哈哈哈……</p>
<p>今天坐地铁上班的时候，在转线下行地铁的过程中，鞋带卡扶梯了。</p>
<p>尝试自己去解决，无奈解决不了，地铁工作人员看到马上过来给我解决了，过程虽然显得有点狼狈：</p>
<p>卡住—尝试自己拔出—未果—脱鞋—站一旁—协助—解决</p>
<p>哈哈哈😁，虽然没有被拍下来，但是自己生成了一张用ai的图片，还挺像……</p>
]]></content:encoded>
    </item>
<item>
      <title>build for today,be ready for tomorrow.</title>
      <link>https://knowledge.landen.dpdns.org/posts/notes/build-ready/</link>
      <guid isPermaLink="true">https://knowledge.landen.dpdns.org/posts/notes/build-ready/</guid>
      <pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Landen</dc:creator>
      <author>jiasu1466@gmail.com (Landen)</author>
      <updated>2026-09-12T00:00:00.000Z</updated>
      <category>随记</category>
      <description>记录一次 IT 基础设施分享后的学习、团队协作和自我成长思考。</description>
      <media:content url="https://knowledge.landen.dpdns.org/images/learn/build-ready-cover.webp" medium="image" />
      <content:encoded><![CDATA[<h2 id="presentation">Presentation</h2>
<p>今天分享的主题相关的内容是关于一个IT基础设施的建设，一个公司，一个系统的正常运转离不开软硬件和天时地利人和同时发挥的作用。</p>
<p>今天的主题让我认识到了基础建设的重要性，和一些相关的知识和关于基础建设的一些词语，比如server,rack
server,storage,switch,firewall……其实印象比较深的两句话是please don’t not throw
sausage,pizza away.和bulid for today,be reader for tomorrow.</p>
<h2 id="thinking">Thinking</h2>
<p>其中第一句话是关于osi，开放系统互连参考模型的七层，open systems interconnection
reference
model,其实我之前没怎么记住，但是呢，这次的分享让我巧记了，物理层-链路层-网络层-网络层-传输层-会话层-展示层-应用层。</p>
<p>虽然自己是数据科学与大数据技术专业，但是其实自己并没有很了解这个方面。</p>
<p>这也是自己需要补的地方。</p>
<p>学习不知专业知识，更有，soft
skills，我们玩了三个小游戏，一个是关于团队合作，第二个关于一个银行系统的子系统重要性排序，还有一个就是动态规划。</p>
<h3 id="teamwork">TeamWork</h3>
<p>一个团队中，我们是否需要认真思考一下我们的职责呢？答案是肯定的。</p>
<p>每个人在一个团队都有自己的职责，主要是你是这个team的leader呢还是队员，不同位置有不同的职责，首先我们明确自身职责，接受上级指令，有的人在行动，有的人在白嫖，无法避免，但是可以团队协作，至少要说出来。</p>
<p>其次，其实作为一个甲乙方来说，甲方是提需求的，乙方是完成需求的，那我们是不是应该需要首先完成需求呢？效果是乙方实现的，我们不能总问甲方这步这么做，那一步怎么做。</p>
<p>同理，在工作中也是这样，领导给我们发派任务，我们总不能每一步都向老板询问吧！类比当下，其实很多人他不关注过程，它只关注结果，但我们自己需要对自己的过程负责，产出的效果是由自己过程去实现的，但是没有人会关注你的过程，所言：成功的人说什么都是对的，但是你没有成功，你说话的全权威性就大打折扣。</p>
<p>蓝图画出来，但是需要具体的思考具体的行动去行动，要自己去探索。</p>
<h3 id="emergency">Emergency</h3>
<p>你需要做的事有各种状态，我记得有一个四象限介绍了这个，重要紧急，重要不紧急，不重要紧急，不重要不紧急。</p>
<p>日常生活亦是如此，作为一个主题，如何执行我们的人物也是根据我们的事情需要完成的状态去执行的。</p>
<p>在第二个游戏中，对一个系统的子系统重要性排序，可能我自己也没怎么思考，也没结合实际考虑，最终我们的排序做错了好几个，好像没几个是对的。</p>
<p>一个东西的重要性似乎不单纯的取决于单个因素，而是需要多个角度，多个因素去考虑，比如说一个app
应用层面是否可以是暂停呢？答案给我们的似乎是不可以，舆论因素也是一个重要的因素！</p>
<p>在执行某件事的时候，我们下意识的以自己仅有的薄弱认知去理解，但是很难做到尽善尽美，最近我看到有一句话这样说“不要重复造轮子”.</p>
<p>感觉挺对，我们可以在已有的成果上去发挥，所言“站在巨人的肩膀上去看世界”，</p>
<p>其实：这个世界上你所遇到的问题，很多人早就遇到了。</p>
<h3 id="allocation">Allocation</h3>
<p>第三个游戏是关于资源分配的，一个小岛如何建设以增加岛上人口，如何应对紧急危险的事故？如何达到在风险可控的失效效益最大化？</p>
<p>延伸一下，这是一个永久的命题。</p>
<p>这需要我们考虑发展与平衡风险，还有结合各种实际问题。</p>
<p>站在不同的角度有不同的看法，也会产生不一样的执行方案，似乎没有对错。</p>
<p>实际上我们也无法预估所有可能的风险，只能说将我们的风险降低，把发展机会变大。</p>
<p>但是在面对风险的时候我们自己需要一个plan b,或者plan n.</p>
<h2 id="build-ready">Build-Ready</h2>
<p>关于这个话题是我最想说的，也是这次演讲印象最深的一句话</p>
<h3 id="如何build如何ready这也是一个这个深思的问题">如何build?如何ready？这也是一个这个深思的问题</h3>
<p>我其实自己曾经想过一个问题：我应该如何改变现状？如何成为那个可以被人家依靠的人，但似乎现在还没答案。</p>
<p>现在想法是先于行动了，实际行动没完全落实哈……</p>
<p>有时候发现自己挺懒惰的</p>
<p>思想上的巨人行动上的矮子！！！</p>
<p>但又很庆幸自己一步一步再尝试，虽然很慢很慢，但是似乎是向上的</p>
<p>有人会跟你说，你处于这个阶段，这个年龄你就该干什么就该怎么干，你的人生就应该在特定的时间去完成某些事情，比如说，成家立业，让老一辈抱孙子什么之类的，但是说实话，20几岁的年纪，有什么资本去谈论这些？主要也是确实没钱。又会有人跟你说了，你先成家再立业，这样你就有压力去赚钱了……我在想真的吗？</p>
<h3 id="如果让你抉择你会怎么做">如果让你抉择你会怎么做？</h3>
<p>先去沉淀呢？还是赶急赶忙的完成某些的人生大事？</p>
<p>对于我自己来说我也不知道怎么做……</p>
<p>现在的我20多岁出头，似乎是人生的一个小起点，刚出来实习，没钱，没背景没有殷实的家底，也不能让家里人给我爆点金币，哈哈哈……怎么能现阶段实现我的人生的事呢？</p>
<p>还是需要自己去“觉醒”，也不知道自己什么时候能真正的觉醒，现在在尝试阶段吧！</p>
<h3 id="bulid">bulid</h3>
<p>这是一个需要用长期注意去发展，去看待的问题，从学习之路来看，从小学，初中，高中，大学，到目前实习的阶段，我似乎都是在不断提升自己的认知，从开始的狂妄自大到后面的知道天外有天人外有人，这始终告诉我：</p>
<p>世界上总有人比你厉害，总有人比你努力，但是你至少要知道自己比以往进步一点点，缓慢进步，哪怕很慢</p>
<p>给自己打点鸡血：道路是曲折的，前途是光明的</p>
<p>但是要行动要行动要行动，某些事情你拖太久了，哈哈哈😁</p>
<h3 id="ready">ready</h3>
<p>结合起来，其实就是一句话：种一棵树🌲最好的时间是十年前，其次是当下。</p>
<p>明天会怎么变化你无法预估，但是今天至少可以把握，像今天分享的主题一样，没有IT强大的基础设施的建立又怎么会拥有今天强大的互联网呢？</p>
<p>尚且看众大咖，马云，马化腾，马斯克，黄仁勋等等，虽然我远远不能跟他们相提并论，他们也是天选之子，但是我至少有个小目标，改善自己成为那个自己想要成为的人，step
by step。</p>
<p>宏大来看：危机事情的发生需要ready方案去解决，对于个人来说，没有坚实的基础，后来所创建的高楼大厦也会因根基不稳而倒塌。</p>
<p>现在我需要的是：至少学会把自己的根据变得稳一点，慢慢提高自己的认知，才能在某些地方站得住跟脚。</p>
<h2 id="我现在最应该要做的就是">我现在最应该要做的就是:</h2>
<p>build for today ，be ready for tomorrow</p>
]]></content:encoded>
    </item>
<item>
      <title>带着电动车走路上班，推车下班</title>
      <link>https://knowledge.landen.dpdns.org/posts/chatter/out-off-power/</link>
      <guid isPermaLink="true">https://knowledge.landen.dpdns.org/posts/chatter/out-off-power/</guid>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Landen</dc:creator>
      <author>jiasu1466@gmail.com (Landen)</author>
      <updated>2026-09-09T00:00:00.000Z</updated>
      <category>杂谈</category>
      <description>明知山有虎，偏向虎山行，明知道电动车快没电，依旧有侥幸心理</description>
      <media:content url="https://knowledge.landen.dpdns.org/images/chatter/out-off-power.png" medium="image" />
      <content:encoded><![CDATA[<p>因为开学，准备不能像暑假那样快乐充电了，呜呜呜……</p>
<p>前一晚想给电瓶车充电，很不幸，没地方充电，侥幸心理，想着够电今天上下班。</p>
<p>没想到不够，上班半路没电了，下班推着车回来，还用脚蹬！！！</p>
]]></content:encoded>
    </item>
<item>
      <title>个人网站终于有了雏形</title>
      <link>https://knowledge.landen.dpdns.org/posts/chatter/website-first-shape/</link>
      <guid isPermaLink="true">https://knowledge.landen.dpdns.org/posts/chatter/website-first-shape/</guid>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Landen</dc:creator>
      <author>jiasu1466@gmail.com (Landen)</author>
      <updated>2026-09-09T00:00:00.000Z</updated>
      <category>杂谈</category>
      <description>忙活了几天，个人网站终于有了可以继续完善的样子。</description>
      <media:content url="https://knowledge.landen.dpdns.org/social-card.png" medium="image" />
      <content:encoded><![CDATA[<p>忙活了几天，个人网站终于有了一个能看的雏形。</p>
<p>现在还有不少地方要慢慢调整，不过页面真正出现在眼前时，还是挺开心的。之前一直想做的事，总算真正开始了。</p>
<p>先把这一刻记下来。以后继续改，也继续写。</p>
]]></content:encoded>
    </item>
<item>
      <title>用 GitHub 和 Cloudflare Pages 部署静态网站</title>
      <link>https://knowledge.landen.dpdns.org/posts/blog/deploy-static-site-with-cloudflare-pages/</link>
      <guid isPermaLink="true">https://knowledge.landen.dpdns.org/posts/blog/deploy-static-site-with-cloudflare-pages/</guid>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Landen</dc:creator>
      <author>jiasu1466@gmail.com (Landen)</author>
      <updated>2026-09-09T00:00:00.000Z</updated>
      <category>博客</category>
      <description>从代码发布、域名解析到 HTTPS 验收，整理一套可复用的静态网站上线流程。</description>
      <media:content url="https://knowledge.landen.dpdns.org/images/blog/cloudflare-pages-deployment.webp" medium="image" />
      <content:encoded><![CDATA[<p>静态网站只有 HTML、CSS、JavaScript
和构建后的资源，不需要数据库或常驻后端。把这类网站放到 Cloudflare
Pages，可以省去 VPS、Nginx、端口和证书的日常维护。代码由 GitHub 保存，Pages
负责构建和托管，DNS 服务商负责把自定义域名指向网站。</p>
<h2 id="上线前需要准备什么">上线前需要准备什么</h2>
<ul>
<li>一个能够正常构建或直接打开的静态网站</li>
<li>一个 GitHub 仓库</li>
<li>一个 Cloudflare 账号</li>
<li>一个可以修改 DNS 记录的域名</li>
</ul>
<p>先确认项目的发布目录。纯 HTML 项目可能直接发布仓库根目录；Astro、Vite
等项目通常需要执行构建命令，再发布
<code>dist</code>。目录填错时，部署可能显示成功，打开后却没有目标页面。</p>
<h2 id="理清两条链路">理清两条链路</h2>
<p>部署时，代码沿着下面的方向流动。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>本地项目 → GitHub 仓库 → Cloudflare Pages → 线上文件</span></span></code></pre>
<p>访客打开网站时，浏览器走的是另一条路。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>浏览器 → DNS 查询 → Cloudflare Pages → HTTPS 响应 → 页面渲染</span></span></code></pre>
<p>这两条链路分开以后，排错会简单很多。Pages 提供的 <code>pages.dev</code>
地址异常，应先检查代码、构建命令和输出目录。<code>pages.dev</code>
正常而自定义域名异常，检查范围就能收窄到 DNS、域名验证和证书。</p>
<h2 id="连接-github-与-pages">连接 GitHub 与 Pages</h2>
<p>先把网站推送到 GitHub，并确定用于生产发布的分支。随后在 Cloudflare Pages
中导入仓库，填写生产分支、构建命令和输出目录。</p>
<p>常见配置如下。</p>
<table>
<thead>
<tr>
<th>项目类型</th>
<th>构建命令</th>
<th>输出目录</th>
</tr>
</thead>
<tbody>
<tr>
<td>纯 HTML、CSS、JavaScript</td>
<td>留空或使用平台允许的空构建配置</td>
<td>文件所在目录</td>
</tr>
<tr>
<td>Astro</td>
<td><code>npm run build</code></td>
<td><code>dist</code></td>
</tr>
<tr>
<td>Vite</td>
<td><code>npm run build</code></td>
<td><code>dist</code></td>
</tr>
</tbody>
</table>
<p>首次部署完成后，先打开平台生成的 <code>*.pages.dev</code>
地址。确认状态码、页面标题、样式和主要交互均正常，再继续绑定域名。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">curl</span><span style="color:#79B8FF"> -I</span><span style="color:#9ECBFF"> https://项目名.pages.dev/</span></span></code></pre>
<p>预期结果包含成功的 HTTP 状态码和正确的内容类型。浏览器检查仍然不可省略，因为
<code>curl -I</code> 看不到布局和前端交互。</p>
<h2 id="绑定自定义域名">绑定自定义域名</h2>
<p>在 Pages 项目中添加自定义域名。若域名的权威 DNS
仍由其他服务商管理，需要在该服务商处增加 CNAME。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>类型  CNAME</span></span>
<span class="line"><span>名称  knowledge</span></span>
<span class="line"><span>目标  项目名.pages.dev.</span></span></code></pre>
<p>部分 DNS
控制台会自动处理目标末尾的点，部分控制台会把没有末尾点的目标当成相对域名。保存后要检查最终记录，确保目标没有被拼成下面这种形式。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>项目名.pages.dev.你的域名.</span></span></code></pre>
<p>可以通过公共 DNS 查询验证记录。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">curl</span><span style="color:#79B8FF"> -fsS</span><span style="color:#79B8FF"> \</span></span>
<span class="line"><span style="color:#9ECBFF">  'https://dns.google/resolve?name=你的完整域名&amp;type=CNAME'</span></span></code></pre>
<p>DNS 返回正确结果后，等待 Pages 将自定义域名标记为可用，并确认 HTTPS 已生效。DNS
缓存受 TTL 影响，刚修改记录时，不同网络可能在一段时间内得到不同结果。</p>
<h2 id="按层验收">按层验收</h2>
<p>按固定顺序检查，可以避免同时追查多个无关问题。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>本地构建</span></span>
<span class="line"><span>   ↓</span></span>
<span class="line"><span>GitHub 生产分支</span></span>
<span class="line"><span>   ↓</span></span>
<span class="line"><span>Pages 临时域名</span></span>
<span class="line"><span>   ↓</span></span>
<span class="line"><span>公共 DNS</span></span>
<span class="line"><span>   ↓</span></span>
<span class="line"><span>自定义域名与 HTTPS</span></span>
<span class="line"><span>   ↓</span></span>
<span class="line"><span>页面内容</span></span></code></pre>
<ol>
<li>本地构建成功，预览页面正常。</li>
<li>GitHub 的生产分支包含目标提交。</li>
<li><code>pages.dev</code> 地址能够返回目标页面。</li>
<li>公共 DNS 返回正确的 CNAME。</li>
<li>Pages 中的自定义域名处于可用状态。</li>
<li>正式域名通过 HTTPS 返回目标页面。</li>
</ol>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">curl</span><span style="color:#79B8FF"> -I</span><span style="color:#9ECBFF"> https://项目名.pages.dev/</span></span>
<span class="line"><span style="color:#B392F0">curl</span><span style="color:#79B8FF"> -I</span><span style="color:#9ECBFF"> https://你的完整域名/</span></span>
<span class="line"></span>
<span class="line"><span style="color:#B392F0">curl</span><span style="color:#79B8FF"> -sS</span><span style="color:#9ECBFF"> https://你的完整域名/</span><span style="color:#79B8FF"> \</span></span>
<span class="line"><span style="color:#F97583">  |</span><span style="color:#B392F0"> rg</span><span style="color:#79B8FF"> -o</span><span style="color:#9ECBFF"> '&lt;title&gt;[^&lt;]+&lt;/title&gt;'</span><span style="color:#79B8FF"> \</span></span>
<span class="line"><span style="color:#F97583">  |</span><span style="color:#B392F0"> head</span><span style="color:#79B8FF"> -1</span></span></code></pre>
<p>最后一条命令可以确认服务器返回的页面标题，避免只看到 <code>200</code>
就误以为内容已经更新。</p>
<table>
<thead>
<tr>
<th>层级</th>
<th>检查方法</th>
<th>成功标志</th>
</tr>
</thead>
<tbody>
<tr>
<td>本地</td>
<td>运行项目构建</td>
<td>成功生成目标路由</td>
</tr>
<tr>
<td>GitHub</td>
<td>查看生产分支</td>
<td>最新提交与待发布版本一致</td>
</tr>
<tr>
<td>Pages</td>
<td>打开临时域名</td>
<td>返回目标页面</td>
</tr>
<tr>
<td>DNS</td>
<td>查询 CNAME</td>
<td>指向正确的 <code>pages.dev.</code> 地址</td>
</tr>
<tr>
<td>HTTPS</td>
<td>请求正式域名</td>
<td>返回成功状态码</td>
</tr>
<tr>
<td>内容</td>
<td>检查标题和关键页面</td>
<td>页面属于目标版本</td>
</tr>
</tbody>
</table>
<h2 id="常见故障">常见故障</h2>
<table>
<thead>
<tr>
<th>现象</th>
<th>先检查</th>
<th>问题通常所在的位置</th>
</tr>
</thead>
<tbody>
<tr>
<td>本地构建失败</td>
<td>终端错误和依赖版本</td>
<td>代码、依赖或构建配置</td>
</tr>
<tr>
<td>Pages 部署失败</td>
<td>Deployment 日志</td>
<td>构建命令或输出目录</td>
</tr>
<tr>
<td><code>pages.dev</code> 返回 404</td>
<td>发布目录和静态路由</td>
<td>部署产物</td>
</tr>
<tr>
<td>临时域名正常，正式域名失败</td>
<td>公共 DNS</td>
<td>CNAME、缓存或域名验证</td>
</tr>
<tr>
<td>正式域名返回 200，内容不对</td>
<td>页面标题和提交号</td>
<td>旧部署、缓存或生产分支</td>
</tr>
</tbody>
</table>
<h3 id="pagesdev-无法访问"><code>pages.dev</code> 无法访问</h3>
<p>查看 Pages
的部署日志，核对生产分支、构建命令和输出目录。纯静态项目不需要虚构一套构建流程，有构建工具的项目则必须发布生成后的目录。</p>
<h3 id="自定义域名无法访问">自定义域名无法访问</h3>
<p>先确认 <code>pages.dev</code> 正常，再查询公共 DNS。CNAME 目标错误、记录尚未传播或 Pages
域名验证失败，都只影响自定义域名这一段。</p>
<h3 id="cname-被追加当前域名">CNAME 被追加当前域名</h3>
<p>DNS
服务商把目标识别成了相对域名。按照该服务商的规则，将目标改为完整域名，必要时补上末尾的
<code>.</code>，保存后重新查询公共 DNS。</p>
<h3 id="pages-一直显示域名验证失败">Pages 一直显示域名验证失败</h3>
<p>先保证公共 DNS
已经返回正确记录，再重试验证。若控制台保留了旧的失败任务，可以移除失败的域名绑定后重新添加。删除绑定前保留正确的
DNS 记录，避免再次引入变量。</p>
<h3 id="github-cli-登录出现网络错误">GitHub CLI 登录出现网络错误</h3>
<p>检查终端中的代理变量和本机代理端口是否一致。代理变量存在，但对应程序没有运行时，请求也会失败。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">env</span><span style="color:#F97583"> |</span><span style="color:#B392F0"> rg</span><span style="color:#79B8FF"> -i</span><span style="color:#9ECBFF"> '^(http|https|all)_proxy='</span></span>
<span class="line"><span style="color:#B392F0">ss</span><span style="color:#79B8FF"> -lntup</span></span>
<span class="line"><span style="color:#B392F0">gh</span><span style="color:#9ECBFF"> auth</span><span style="color:#9ECBFF"> status</span></span></code></pre>
<h2 id="日常发布与恢复">日常发布与恢复</h2>
<p>网站上线后，不需要每次重新配置域名。日常更新完成本地验证、提交和推送后，生产分支会触发下一次
Pages 部署。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> status</span><span style="color:#79B8FF"> --short</span><span style="color:#79B8FF"> --branch</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> build</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> diff</span><span style="color:#79B8FF"> --check</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> add</span><span style="color:#9ECBFF"> 计划发布的文件</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> commit</span><span style="color:#79B8FF"> -m</span><span style="color:#9ECBFF"> "Update website content"</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span></span></code></pre>
<p>具体的分支安排、Preview 验收和回滚方法见《用 Git
维护个人网站》。部署侧继续确认生产部署对应目标提交，并检查临时域名、正式域名和页面内容。域名、Pages
项目或平台目标没有变化时，不要改动 DNS。</p>
]]></content:encoded>
    </item>
<item>
      <title>用 Git 维护个人网站</title>
      <link>https://knowledge.landen.dpdns.org/posts/blog/git-website-operations/</link>
      <guid isPermaLink="true">https://knowledge.landen.dpdns.org/posts/blog/git-website-operations/</guid>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Landen</dc:creator>
      <author>jiasu1466@gmail.com (Landen)</author>
      <updated>2026-09-09T00:00:00.000Z</updated>
      <category>博客</category>
      <description>从开始修改、检查改动到预览、发布和回滚，走一遍个人网站的 Git 运维流程。</description>
      <media:content url="https://knowledge.landen.dpdns.org/images/blog/website-workflow-cover.webp" medium="image" />
      <content:encoded><![CDATA[<p>这套流程适合一个常见的个人网站场景。代码平时在开发分支上修改，确认无误以后再进入
<code>main</code>。Cloudflare Pages 监听仓库里的分支，为开发分支生成预览，为 <code>main</code>
部署正式网站。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>同步 main</span></span>
<span class="line"><span>   ↓</span></span>
<span class="line"><span>本地修改 → 自动检查 → 提交开发分支 → Preview 验收</span></span>
<span class="line"><span>                                      ↓</span></span>
<span class="line"><span>                                  合并 main</span></span>
<span class="line"><span>                                      ↓</span></span>
<span class="line"><span>                                  正式部署</span></span></code></pre>
<p>每个箭头都对应一次可以验证的状态变化。Git
状态确认分支是否放对，自动检查确认网站能否交付，Preview 负责检查真实部署，<code>main</code>
只负责发布。</p>
<p>本文使用这个网站当前的分支安排。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>main                  生产分支，对应正式网站</span></span>
<span class="line"><span>v3                    当前开发分支</span></span>
<span class="line"><span>feat/*                新功能分支</span></span>
<span class="line"><span>fix/*                 修复分支</span></span></code></pre>
<p>如果你正在使用 <code>feat/*</code> 或 <code>fix/*</code>，把后文命令里的 <code>v3</code> 换成实际分支名即可。</p>
<h2 id="开始修改前先把分支放对">开始修改前先把分支放对</h2>
<p>进入项目，切换到开发分支，再看一眼工作区状态。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#79B8FF">cd</span><span style="color:#9ECBFF"> ~/Projects/knowledge-site</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> switch</span><span style="color:#9ECBFF"> v3</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> status</span><span style="color:#79B8FF"> --short</span><span style="color:#79B8FF"> --branch</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> fetch</span><span style="color:#9ECBFF"> origin</span></span></code></pre>
<p><code>git status --short --branch</code>
会显示当前分支，也会列出尚未提交的文件。这里值得停几秒，
确认自己没有带着上一次留下的修改开始新工作。</p>
<p><code>git fetch origin</code> 只更新远程分支信息，不会改动当前文件。远程 <code>main</code>
如果已有新提交， 可以把最新的生产版本接到开发分支上。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> rebase</span><span style="color:#9ECBFF"> origin/main</span></span></code></pre>
<p>rebase 没有冲突时会直接结束。出现冲突后，打开 Git
标出的文件，处理冲突内容，再继续。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> add</span><span style="color:#9ECBFF"> 冲突文件</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> rebase</span><span style="color:#79B8FF"> --continue</span></span></code></pre>
<p>如果发现这次 rebase 不该继续，可以回到开始前的状态。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> rebase</span><span style="color:#79B8FF"> --abort</span></span></code></pre>
<h2 id="在本地运行网站">在本地运行网站</h2>
<p>本地需要 Node.js 22 或更高版本。完整检查还会用到 Deno 2。第一次拉取项目时，先按
锁文件安装依赖。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> ci</span></span></code></pre>
<p>平时启动开发服务器只需要运行下面的命令。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> dev</span></span></code></pre>
<p>浏览器访问
<code>http://localhost:4321/</code>。改了布局或交互以后，桌面和移动端都要看一遍。
开发页面能打开，只能说明本地服务器正常运行。类型、构建和站内链接还要交给提交前检查。</p>
<p>需要查看生产构建的结果时，先构建，再启动本地预览。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> build</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> preview</span></span></code></pre>
<h2 id="提交前检查网站">提交前检查网站</h2>
<p>这个项目把常用检查收进了一个命令。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> verify</span></span></code></pre>
<p>它会检查格式、脚本语法、Astro
类型和生产构建，还会核对站内链接、搜索索引、草稿排除、
文章元数据、RSS、sitemap、robots、CSS 资源引用、标签 slug 冲突和 Git 空白字符。
看到命令成功结束，才能确认这次修改通过了项目现有的自动检查。</p>
<p>需要单独定位问题时，可以拆开运行。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> format:check</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> check:scripts</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> build</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> validate:site</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> diff</span><span style="color:#79B8FF"> --check</span></span></code></pre>
<p>测试通过以后，再检查自己准备提交的内容。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> status</span><span style="color:#79B8FF"> --short</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> diff</span></span></code></pre>
<p>暂存文件以后，还可以查看最终将进入提交的差异。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> diff</span><span style="color:#79B8FF"> --staged</span></span></code></pre>
<table>
<thead>
<tr>
<th>命令</th>
<th>要确认的事情</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>git status --short</code></td>
<td>哪些文件被修改、删除或新增</td>
</tr>
<tr>
<td><code>git diff</code></td>
<td>尚未暂存的内容改了什么</td>
</tr>
<tr>
<td><code>git diff --staged</code></td>
<td>下一次提交会包含什么</td>
</tr>
</tbody>
</table>
<p>这一步主要防止误加
<code>dist/</code>、<code>.env</code>、私人日记、公司资料和临时文件。自动检查关心网站能否
正常构建，提交者仍要判断每个文件是否应该公开。</p>
<h2 id="提交并推送开发分支">提交并推送开发分支</h2>
<p>确认差异以后，把修改提交到 <code>v3</code>。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> add</span><span style="color:#9ECBFF"> .</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> status</span><span style="color:#79B8FF"> --short</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> commit</span><span style="color:#79B8FF"> -m</span><span style="color:#9ECBFF"> "Update website content"</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> v3</span></span></code></pre>
<p><code>git add .</code>
会暂存当前目录下的全部改动，所以紧接着再看一次状态很有必要。提交说明应当写清
这次做了什么，例如 <code>Update Git operations guide</code>，以后查历史会省事很多。</p>
<p>这个项目的本地 <code>v3</code> 以上游 <code>origin/main</code> 为比较基准。推送时显式写出
<code>origin v3</code>， 可以保留这项设置。功能分支也应当写出实际分支名。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> feat/分支名</span></span></code></pre>
<p>推送以后，仓库里的 GitHub Actions 会安装依赖并重新运行
<code>npm run verify</code>。这项检查会 在 Pull Request 和非 <code>main</code>
分支的推送上触发。本地通过以后，仍要确认远程检查成功。</p>
<h2 id="在-preview-中检查真实页面">在 Preview 中检查真实页面</h2>
<p>推送 <code>v3</code>、<code>feat/*</code> 或 <code>fix/*</code> 后，Cloudflare Pages 会生成 Preview
Deployment。它比本地
开发服务器更接近实际部署环境，也适合在发布前分享给别人检查。</p>
<p>至少打开这些页面。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>/</span></span>
<span class="line"><span>/learn/</span></span>
<span class="line"><span>/blog/</span></span>
<span class="line"><span>/notes/</span></span>
<span class="line"><span>/chatter/</span></span>
<span class="line"><span>/about/</span></span>
<span class="line"><span>/search/</span></span>
<span class="line"><span>/tags/</span></span>
<span class="line"><span>/timeline/</span></span>
<span class="line"><span>/404.html</span></span></code></pre>
<p>再打开一篇文章，检查正文、标签链接、搜索、主题切换和移动端导航。页面或路由有改动时，
还要确认构建输出、搜索索引、sitemap 和 robots 是否符合预期。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>首页</span></span>
<span class="line"><span> ├─ 导航与最近更新</span></span>
<span class="line"><span> ├─ 栏目页</span></span>
<span class="line"><span> │   ├─ 文章列表</span></span>
<span class="line"><span> │   └─ 筛选与空状态</span></span>
<span class="line"><span> ├─ 文章页</span></span>
<span class="line"><span> │   ├─ 正文与目录</span></span>
<span class="line"><span> │   └─ 标签与返回按钮</span></span>
<span class="line"><span> └─ 辅助入口</span></span>
<span class="line"><span>     ├─ 搜索与标签</span></span>
<span class="line"><span>     ├─ 时间线</span></span>
<span class="line"><span>     └─ 404</span></span></code></pre>
<h2 id="把确认过的版本发布到-main">把确认过的版本发布到 main</h2>
<p>推荐在 GitHub 创建一个从 <code>v3</code> 到 <code>main</code> 的 Pull Request。自动检查通过，Preview
也确认 无误以后，再合并 Pull Request。<code>main</code> 收到新提交后，Cloudflare Pages
会自动部署正式网站。</p>
<p>确定需要从本地直接发布时，可以运行。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> fetch</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> main</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> v3:main</span></span></code></pre>
<p>直接推送少了 Pull Request
提供的检查记录和合并确认，更适合你已经明确核对过分支差异的 情况。GitHub Actions
的 push 检查排除了 <code>main</code>，所以直接发布前要确认本地 <code>npm run verify</code>
和开发分支最近一次远程检查都已通过。</p>
<h2 id="线上出错时怎样回滚">线上出错时怎样回滚</h2>
<p>优先使用
<code>git revert</code>。它会创建一个抵消旧改动的新提交，原来的提交记录仍然保留，出了
问题也容易继续追查。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> switch</span><span style="color:#9ECBFF"> main</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> pull</span><span style="color:#79B8FF"> --ff-only</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> main</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> log</span><span style="color:#79B8FF"> --oneline</span><span style="color:#79B8FF"> --decorate</span><span style="color:#79B8FF"> -20</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> revert</span><span style="color:#9ECBFF"> 提交号</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> verify</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> main</span></span></code></pre>
<p>Cloudflare Pages 收到这个新提交后会重新部署。你也可以在 Cloudflare Pages 的
Deployments 页面选择以前成功的生产部署并执行
Rollback。页面回滚能较快恢复网站，之后 仍建议在 Git
里补上对应的修复提交，让仓库记录与线上状态重新一致。</p>
<p>线上恢复以后，把 <code>main</code> 的新提交接回开发分支。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> switch</span><span style="color:#9ECBFF"> v3</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> rebase</span><span style="color:#9ECBFF"> origin/main</span></span></code></pre>
<table>
<thead>
<tr>
<th>当前情况</th>
<th>合适的动作</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>文件尚未暂存</td>
<td><code>git restore 文件路径</code></td>
<td>丢弃该文件的本地修改</td>
</tr>
<tr>
<td>文件误入暂存区</td>
<td><code>git restore --staged 文件路径</code></td>
<td>保留修改，只取消暂存</td>
</tr>
<tr>
<td>错误已经进入 <code>main</code></td>
<td><code>git revert 提交号</code></td>
<td>增加一条回滚提交</td>
</tr>
<tr>
<td>线上需要先恢复</td>
<td>Pages Rollback</td>
<td>后续仍需补 Git 修复</td>
</tr>
</tbody>
</table>
<h2 id="改错文件时怎样恢复">改错文件时怎样恢复</h2>
<p>恢复以前先看这个文件改了什么。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> diff</span><span style="color:#79B8FF"> --</span><span style="color:#9ECBFF"> 文件路径</span></span></code></pre>
<p>丢弃尚未提交的修改，可以运行。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> restore</span><span style="color:#9ECBFF"> 文件路径</span></span></code></pre>
<p>文件已经暂存，但你想保留本地修改，只把它移出暂存区，可以运行。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> restore</span><span style="color:#79B8FF"> --staged</span><span style="color:#9ECBFF"> 文件路径</span></span></code></pre>
<p>需要取回旧提交里的单个文件，可以指定提交号。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> restore</span><span style="color:#79B8FF"> --source</span><span style="color:#9ECBFF"> 提交号</span><span style="color:#79B8FF"> --</span><span style="color:#9ECBFF"> 文件路径</span></span></code></pre>
<p>这些命令处理的对象不同。执行前确认文件路径和当前差异，尤其要留意
<code>git restore 文件路径</code> 会丢弃该文件尚未提交的修改。</p>
<h2 id="覆盖远程-main-前再确认一次">覆盖远程 main 前再确认一次</h2>
<p>只有确认远程 <code>main</code>
上独有的提交可以舍弃时，才考虑改写它的历史。先比较开发分支与远程 生产分支。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> fetch</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> main</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> log</span><span style="color:#79B8FF"> --oneline</span><span style="color:#79B8FF"> --left-right</span><span style="color:#9ECBFF"> v3...origin/main</span></span></code></pre>
<p>确认差异以后，使用带租约检查的强制推送。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span><span style="color:#79B8FF"> --force-with-lease</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> v3:main</span></span></code></pre>
<p>不要把它换成普通的 <code>--force</code>。<code>--force-with-lease</code>
会在远程分支已经被别人更新时拒绝
覆盖，能挡住一部分误操作。它仍然会改写历史，不能代替发布前的人工确认。</p>
<h2 id="一次完整的日常操作">一次完整的日常操作</h2>
<p>熟悉各步骤以后，日常流程可以收拢成下面这组命令。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="bash"><code><span class="line"><span style="color:#79B8FF">cd</span><span style="color:#9ECBFF"> ~/Projects/knowledge-site</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> switch</span><span style="color:#9ECBFF"> v3</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> status</span><span style="color:#79B8FF"> --short</span><span style="color:#79B8FF"> --branch</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> fetch</span><span style="color:#9ECBFF"> origin</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> ci</span></span>
<span class="line"><span style="color:#B392F0">npm</span><span style="color:#9ECBFF"> run</span><span style="color:#9ECBFF"> verify</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> add</span><span style="color:#9ECBFF"> .</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> status</span><span style="color:#79B8FF"> --short</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> commit</span><span style="color:#79B8FF"> -m</span><span style="color:#9ECBFF"> "Update website"</span></span>
<span class="line"><span style="color:#B392F0">git</span><span style="color:#9ECBFF"> push</span><span style="color:#9ECBFF"> origin</span><span style="color:#9ECBFF"> v3</span></span></code></pre>
<p>推送完成后查看 Cloudflare Preview。确认页面无误，再通过 Pull Request 合并到
<code>main</code>。
本地检查、远程预览和正式发布各解决一类问题，把这三处都走完，一次网站更新才算结束。</p>
<pre class="astro-code github-dark" style="background-color:#24292e;color:#e1e4e8; overflow-x: auto;" tabindex="0" data-language="text"><code><span class="line"><span>开始工作      switch → status → fetch → rebase</span></span>
<span class="line"><span>本地检查      dev → verify → diff</span></span>
<span class="line"><span>提交预览      add → diff --staged → commit → push</span></span>
<span class="line"><span>正式发布      Actions → Preview → Pull Request → main</span></span>
<span class="line"><span>故障恢复      定位提交 → revert → verify → push</span></span></code></pre>
]]></content:encoded>
    </item>
  </channel>
</rss>