<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/Neomelt_blog/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Neomelt&apos;s Blog</title><description>Latest posts from Neomelt Blog.</description><link>https://www.neomelt.cloud</link><language>zh-cn</language><lastBuildDate>Wed, 05 Aug 2026 03:41:10 GMT</lastBuildDate><atom:link href="https://www.neomelt.cloud/rss.xml" rel="self" type="application/rss+xml"/><item><title>谈谈 Lee Sedol moment</title><link>https://www.neomelt.cloud/posts/whats-lee-sedol-moment-of-robotics</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/whats-lee-sedol-moment-of-robotics</guid><description>当 AI 逐渐强大到可以替代掉一些 work 的时候，我们应该思考些什么……</description><pubDate>Tue, 04 Aug 2026 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前两天在X上看到Tairan He的一句评论：“Everyone will have their Lee Sedol moment, just at a different time.”&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/whats-Lee-sedol-moment-of-robotics/1.png&quot; alt=&quot;Tairan He 在 X 上谈每个人的 Lee Sedol moment&quot;&gt;&lt;/p&gt;
&lt;p&gt;从我大学拥有自己电脑后第一次接触 AI 时的 GPT 3.5，到现如今的 Claude Mythos 5/Fable 5 系列、Opus 5、GPT 5.6、DeepSeek V4 等模型百花齐放的景象，才过去了不到三年的时间，AI 已经从曾经那个只是存在于 web chat、鲜为人知的东西变成了如今无人不晓的智能助手，在这期间，来了很多人，走了更多的人。&lt;/p&gt;
&lt;p&gt;AI 的发展改变了人们对它的态度。三年前，AI 几乎无法独立并且良好地承担工作，甚至简单的学习辅助，那时候如果有人看到 AI 写代码，一定会嗤之以鼻。直到 2025 年初，vibecoding 的概念横空出世，加之 Claude、OpenAI、Gemini 等一众模型的发布和 Cursor 这种 IDE 的发布，使得 AI coding 的主流风向快速地变成了 vibecoding。在 2026 年的夏天，越来越多的公司开始使用 AI native 的开发模式，越来越多的程序员、研究者从恐慌转变为接受这种开发/科研模式。&lt;/p&gt;
&lt;p&gt;这让我不禁思考：当有一天，机器人也这样逐步发展，等到可以证明它能替代大部分人工作的那一天真正到来，我想那会是很具有悲情色彩和机遇的体验。&lt;/p&gt;
&lt;p&gt;2016 年，李世石输给 AlphaGo 已经成了 AI 史上最著名的画面之一。&lt;/p&gt;
&lt;p&gt;2026 年 8 月，这种感受又被推到了数学上。OpenAI 发布了一份 249 页的材料，称其中十项数学和理论计算机科学结果由内部模型获得，内容包括非 sofic 群的显式构造、对 Connes 刚性猜想的反例等。&lt;a href=&quot;https://cdn.openai.com/pdf/ten-proofs-oai.pdf&quot;&gt;公开 PDF&lt;/a&gt; 的确包含十篇完整手稿，也明确写着结果来自内部模型。&lt;/p&gt;
&lt;p&gt;这意味着模型已经能够生成值得领域专家严肃检查的研究手稿。&lt;/p&gt;
&lt;p&gt;围棋有封闭规则、明确胜负和几乎无限的自我对弈。AlphaGo Zero 最惊人的地方，不只是它赢过人，而是它不再从人类棋谱开始，在三天自我对弈后就以 100:0 击败了曾战胜李世石的公开版 AlphaGo。&lt;a href=&quot;https://deepmind.google/blog/alphago-zero-starting-from-scratch/&quot;&gt;DeepMind 当年的说明&lt;/a&gt; 给出了这个结果。&lt;/p&gt;
&lt;p&gt;一种很有解释力的框架是：一个领域越容易得到廉价、稳定、可重复的反馈，机器就越容易形成训练闭环。这不能单独预测所有领域的进展顺序，却能解释一个反直觉的现象：数学研究中的一部分任务，可能早于通马桶被突破；机器人学家的某个“李世石时刻”，也可能早于水管工真正失去工作。&lt;/p&gt;
&lt;p&gt;这就是 Moravec 悖论最反讽的地方：在人类看来很高级的抽象推理，往往比我们下意识完成的感知与运动更容易被计算。&lt;/p&gt;
&lt;p&gt;但是从某种意义上来讲：李世石是幸运的，他的 Lee Sedol moment 是确定的，我们很多人甚至都不会意识到这一天的到来，只能在事后才明白早已过去，就像 AI 之于程序员。&lt;/p&gt;
&lt;p&gt;我相信，robotics 终将会迎来属于我们的 Lee Sedol moment，而且会和 AI 非常像。对机器人来说，我认为这个时刻至少应该满足几个条件：面对没有为它专门设计的真实环境，在没有遥操作和人工兜底的情况下，连续完成一项有实际价值的任务，并在成功率、速度或者成本上达到甚至超过熟练的人类。&lt;/p&gt;
&lt;p&gt;AlphaGo 可以通过自我对弈得到近乎无限的数据，LLM 也拥有互联网规模的文本以及可以大规模并行的训练目标。但机器人没有这么廉价的反馈：每一次动作都要发生在真实或模拟的物理环境中，真机会磨损、会碰撞，仿真又很难完全复现摩擦、柔性和接触。因此机器人真正缺少的，也许是一套能够规模化运行的“动作—结果—修正”闭环。&lt;/p&gt;
&lt;p&gt;人类从出生开始就在持续接收视觉、触觉、本体感觉和动作反馈，语言是在这套具身经验上逐渐生长出来的。现在一部分 VLA 走的却是另一条路径：先继承视觉语言模型的语义知识，再用有限的机器人数据把这些知识接到动作上。我不知道这种差异是不是机器人进展缓慢的决定性原因，但它至少说明，语言里的“知道”和身体能够使用的“知道”之间仍然隔着一层 grounding。&lt;/p&gt;
&lt;p&gt;我仍然不认为单纯依靠语言模型直接输出动作会是最终方案。未来的机器人智能很可能还需要把视觉、触觉、本体感觉、动作历史、长期记忆和某种后果预测机制放进同一个闭环。它最终是否还会被叫作 LLM 我们无从得知，但真正重要的是系统完成这些事情的能力。&lt;/p&gt;
&lt;p&gt;将视角放回到 2026 年的行业内：VLA？world model？RL？或者说其他的什么混合方案，哪一个会是方向呢，或者说是当前的局部最优解呢，我不知道，但是可以肯定的一点是，不管算法框架怎么变，可靠的硬件和高质量的物理交互数据都是绕不过去的约束。&lt;/p&gt;
&lt;p&gt;至于最终的价值会沉淀在哪一层，现在还不能确定。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-08-04T18:00:00.000Z</dc:date><dcterms:modified>2026-08-05T03:41:10.000Z</dcterms:modified><category>随便写写</category><category>思考</category><category>AI</category><category>机器人</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/whats-lee-sedol-moment-of-robotics#comments</comments></item><item><title>用 Tailscale 远程访问自己的机器</title><link>https://www.neomelt.cloud/posts/tailscale-remote-access</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/tailscale-remote-access</guid><description>没有公网 IP、不动路由器，在家用浏览器直接打开远端主机上的 ComfyUI。记录一下 Tailscale 的原理、配置过程和踩过的坑。</description><pubDate>Tue, 21 Jul 2026 16:17:00 GMT</pubDate><content:encoded>&lt;p&gt;手上有张显卡一直闲着，想拿来跑生图，苦于没办法远程调用，问了 Claude 有没有解法，答案是 Tailscale。下面先从网络本身的约束讲起，捋清楚为什么只能这么干，再落到具体命令。&lt;/p&gt;
&lt;h2 id=&quot;先看效果&quot;&gt;先看效果&lt;/h2&gt;
&lt;p&gt;远端有一台带 RTX 5060 Ti 的 Linux 主机，上面跑着 ComfyUI 出图服务，只监听 &lt;code&gt;127.0.0.1:8188&lt;/code&gt;。我人在家里，轻薄本浏览器打开一个域名，就是完整的原生 Web 界面。这不是远程桌面串流，是真在浏览器里操作，没有串流那种卡顿：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/tailscale-remote-access/comfyui-via-tsnet.png&quot; alt=&quot;家里笔记本浏览器直开远端主机上的 ComfyUI&quot;&gt;&lt;/p&gt;
&lt;p&gt;全程不需要公网 IP、不需要自建服务器、不需要动路由器，而且这个服务&lt;strong&gt;从头到尾没有暴露给公网，甚至没有暴露给它所在局域网里的任何人&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&quot;两台机器互访到底需要什么&quot;&gt;两台机器互访，到底需要什么&lt;/h2&gt;
&lt;p&gt;先不急着谈工具。两台机器要能互访，需要的东西就三样：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;得有个地址，能被路由到对方；&lt;/li&gt;
&lt;li&gt;路径上每一跳（路由器、防火墙、NAT）都愿意帮你把包转过去；&lt;/li&gt;
&lt;li&gt;公网不可信，所以还得能确认对方是谁，并且把流量加密。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;麻烦在于，前两条在今天的互联网上&lt;strong&gt;默认不成立&lt;/strong&gt;。IPv4 地址早在 2011 年就分配殆尽，绝大多数设备拿到的是 RFC 1918 私网地址（&lt;code&gt;192.168.x&lt;/code&gt; / &lt;code&gt;10.x&lt;/code&gt;），躲在 NAT 后共享少数公网出口；家宽还常常再叠一层运营商级 NAT（CGNAT，Carrier-Grade NAT），这时候连你家路由器的 WAN 口拿到的都不是公网地址，端口映射根本没得做。而 NAT 说白了就是个单向阀：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;出站连接及其回包放行；没有映射表项的入站包，一律丢弃。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;于是家里的笔记本和远端主机各自躲在 NAT 后面，谁都没法被对方连进来。这不是哪里坏了，也不是你配置没弄对，就是 IPv4 不够用、大家挤一个出口的结果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/tailscale-remote-access/nat-punch.svg&quot; alt=&quot;NAT 困境与打洞推导&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;只剩三条路&quot;&gt;只剩三条路&lt;/h2&gt;
&lt;p&gt;入站被堵死之后，能走的路其实就剩三条：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;路线&lt;/th&gt;&lt;th&gt;思路&lt;/th&gt;&lt;th&gt;代价&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;A. 制造公网可达点&lt;/td&gt;&lt;td&gt;买 VPS 做中转（frp 等）；或路由器端口映射&lt;/td&gt;&lt;td&gt;服务器钱和维护；映射需要你没有的路由器权限，家宽还常无公网 IPv4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;B. 放弃网络层，搬画面&lt;/td&gt;&lt;td&gt;远控软件（RustDesk / 向日葵）&lt;/td&gt;&lt;td&gt;得到的是”屏幕”不是”网络”：画质延迟受限，无法 curl / SSH / 调 API&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;C. 钻 NAT 的空子&lt;/td&gt;&lt;td&gt;出站反正是允许的，那就让两边各自出站，在中间碰头&lt;/td&gt;&lt;td&gt;几乎没有，见下&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;路线 C 展开就是 NAT 穿越（NAT traversal），也就是俗称的打洞。两边先各自出站连一个会合点，把”我的公网映射地址和端口”跟”我的公钥”交换一下，然后同时朝对方的映射地址发包。两边的 NAT 都以为这是自家发起的会话，各自建了表项，回包就放行了，洞打通之后就是纯点对点直连。&lt;/p&gt;
&lt;p&gt;这里”向会合点问出自己的公网映射地址和端口”，就是 STUN 在做的事（Session Traversal Utilities for NAT，现行标准 RFC 8489；早期的 RFC 3489 里 STUN 是另一个全称，现在已经废弃了，别搜错）。而”直连、打洞、中继几条路一起试，哪条通用哪条”是 ICE（RFC 8445）的思路。打洞走 UDP 不走 TCP，一是 WireGuard 本身就跑在 UDP 上，二是 TCP 打洞还要额外对付连接状态机，复杂度高出一截。&lt;/p&gt;
&lt;p&gt;上面说的”少数严苛 NAT”得讲准点，它直接决定你会不会被迫走中继。NAT 建映射有两种行为：只按源地址端口分配、对谁都复用同一个映射的，叫端点无关映射（endpoint-independent mapping, EIM），这种能打洞；对每个不同目标都新开一个映射的，叫端点相关映射（EDM），也就是常说的对称型 NAT（symmetric NAT）——你从会合点问到的那个端口，拿去连对方时根本不是同一个，洞自然打不通。这套 NAT 行为的分类出自 RFC 4787，后面”怎么知道自己走的是直连还是中继”一节里有实测判断方法。&lt;/p&gt;
&lt;p&gt;打不通就退回”两边都出站连一个中继，由它转发”，无非多一跳；因为只依赖出站，这条路总是走得通。&lt;/p&gt;
&lt;p&gt;到这里路线 C 还差两块。前面第 3 条要的信任交给 WireGuard，密钥对就是身份，全程加密，跑在内核态，性能损耗基本可以不管。另外还需要一个”介绍人”服务，管公钥分发、地址簿和打洞撮合，注意它只负责介绍，数据流量不经它的手。&lt;/p&gt;
&lt;p&gt;把这一套连打洞带中继带密钥管理全自动化到”装上就通”，就是 Tailscale。它没造什么新技术，就是认了 NAT 这个现实，然后把绕过去的路给修好了。&lt;/p&gt;
&lt;p&gt;Tailscale 常被归到”内网穿透”里，但它跟 frp / ngrok 那一类不是一个东西：它是覆盖网络（overlay network）形态的 mesh VPN。两者确实都要解决 NAT 穿越，可目标是相反的——内网穿透是把某个服务暴露给公网，安全边界落在”地址没人知道”；mesh VPN 是把你自己的设备拉进同一个虚拟局域网，安全边界落在密钥。上面那张表里的路线 A 才是典型的内网穿透，本文走的是路线 C。后面 serve 和 funnel 的区别，说的还是这条线。&lt;/p&gt;
&lt;h2 id=&quot;名词对照&quot;&gt;名词对照&lt;/h2&gt;
&lt;p&gt;上面推导出来的每个角色，Tailscale 里都有个对应的叫法：&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;推导中的角色&lt;/th&gt;&lt;th&gt;Tailscale 名词&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;”我的设备们”这个信任集合&lt;/td&gt;&lt;td&gt;tailnet&lt;/td&gt;&lt;td&gt;边界 = 登录了你账号的设备（本质是一组 WireGuard 公钥）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;虚拟地址&lt;/td&gt;&lt;td&gt;&lt;code&gt;100.x.y.z&lt;/code&gt;&lt;/td&gt;&lt;td&gt;取自 CGNAT 保留段 100.64.0.0/10（RFC 6598），不与家用网段冲突&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;会合点 / 介绍人&lt;/td&gt;&lt;td&gt;控制面 / coordination server（login.tailscale.com）&lt;/td&gt;&lt;td&gt;分发公钥与地址簿、撮合打洞；不经手流量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;打洞失败的兜底中继&lt;/td&gt;&lt;td&gt;DERP&lt;/td&gt;&lt;td&gt;Designated Encrypted Relay for Packets，全球部署，只转发密文&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;给地址起名&lt;/td&gt;&lt;td&gt;MagicDNS&lt;/td&gt;&lt;td&gt;&lt;code&gt;设备名.tailnet名.ts.net&lt;/code&gt; 自动解析&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;把本机服务开门给 tailnet&lt;/td&gt;&lt;td&gt;tailscale serve&lt;/td&gt;&lt;td&gt;反代 + 自动 HTTPS，仅网内可见&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;serve 的公网版&lt;/td&gt;&lt;td&gt;tailscale funnel&lt;/td&gt;&lt;td&gt;会暴露到互联网——本文用不到，不确定就永远别开&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;组网后的全景是这样的：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/tailscale-remote-access/architecture.svg&quot; alt=&quot;Tailscale 组网架构&quot;&gt;&lt;/p&gt;
&lt;p&gt;个人免费额度 100 台设备，这个场景绰绰有余。&lt;/p&gt;
&lt;h2 id=&quot;实操远端主机安装&quot;&gt;实操：远端主机安装&lt;/h2&gt;
&lt;p&gt;安装按官方文档手动来，一共四步，不用 &lt;code&gt;curl | sh&lt;/code&gt; 那种黑箱。国内网络实测 &lt;code&gt;pkgs.tailscale.com&lt;/code&gt; 和控制面均直连可达，无需代理：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 1. 加官方 apt 源（noble = Ubuntu 24.04，其他版本换代号）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  -o&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /usr/share/keyrings/tailscale-archive-keyring.gpg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  -o&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /etc/apt/sources.list.d/tailscale.list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2. 装的是数据面守护进程 tailscaled（WireGuard 隧道就归它管）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;apt-get&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;apt-get&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -y&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tailscale&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 3. 入网 = 把本机公钥注册进你的 tailnet：&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;#    会打印 https://login.tailscale.com/a/xxxx 链接，任意设备浏览器打开登录即可&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 4. 授权日常用户免 sudo 管理（serve 等命令不再要 root）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --operator=你的用户名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建议把四步存成脚本 &lt;code&gt;sudo bash tailscale-setup.sh&lt;/code&gt; 一次跑完。跑完 &lt;code&gt;tailscale ip -4&lt;/code&gt; 能看到本机的 &lt;code&gt;100.x&lt;/code&gt; 身份。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;前置检查一项&lt;/strong&gt;：被远程访问的机器不能自动休眠。GNOME 下看
&lt;code&gt;gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout&lt;/code&gt;，
为 &lt;code&gt;0&lt;/code&gt; 即永不休眠（type 字段哪怕是 &lt;code&gt;suspend&lt;/code&gt;，timeout 为 0 就不会生效）。&lt;/p&gt;
&lt;h2 id=&quot;客户端笔记本--手机&quot;&gt;客户端（笔记本 / 手机）&lt;/h2&gt;
&lt;p&gt;装官方客户端（tailscale.com/download，手机在应用商店搜），&lt;strong&gt;登录同一个账号&lt;/strong&gt;就行。前面名词对照里说过，tailnet 就是”登录了你账号的所有设备”，所以不存在单独的”组网”步骤——不用填对方 IP，也不用交换什么配置，客户端登录完，这台设备就已经在网里了。&lt;/p&gt;
&lt;p&gt;任一设备上验证：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;100.94.159.89&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  neomelt-b760m-h-ddr4&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  linux&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  -&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;100.84.35.92&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;   fedora&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;                linux&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  -&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;两台都在，组网完成。这时候 SSH 就已经能用了——远端 sshd 本来就在监听，只是过去你”够不着”它，现在可达性有了：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; neomelt@100.94.159.89&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;实操把-comfyui-开给-tailnet&quot;&gt;实操：把 ComfyUI 开给 tailnet&lt;/h2&gt;
&lt;p&gt;先说清一件事：一个服务监听哪个地址，等于它在决定信任谁。&lt;/p&gt;
&lt;p&gt;监听 &lt;code&gt;0.0.0.0&lt;/code&gt; 是信任整个局域网，而 ComfyUI 压根没有登录认证，等于把一扇没锁的门开给同网段所有人。监听 &lt;code&gt;127.0.0.1&lt;/code&gt; 只信任本机，安全，但家里就用不上了。我想要的是第三种，只信任我自己那几台设备，而这正好就是 tailnet。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tailscale serve&lt;/code&gt; 就是把边界从”本机”外扩到”tailnet”的那扇门。远端主机上一条命令：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; serve&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --bg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 8188&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有两点要注意。第一次跑会提示 tailnet 还没启用 Serve，命令打印一个 &lt;code&gt;login.tailscale.com/f/serve?...&lt;/code&gt; 链接，然后就开始轮询等着，看着像卡死了，其实是等你去浏览器点一下启用，这是个一次性开关，点完命令自己就继续了。之后网内任何设备打开 &lt;code&gt;https://设备名.tailnet名.ts.net&lt;/code&gt; 就能到。这里用 HTTPS 是因为浏览器对明文页面有各种功能限制，而 ts.net 的证书是自动签的，你什么都不用配，首次访问慢几秒就是在签证书。&lt;/p&gt;
&lt;p&gt;顺手再挂一个静态目录，翻出图产物用（与反代共存于同一域名）：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; serve&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --bg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --set-path&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /outputs&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /home/neomelt/ComfyUI/output&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ tailscale serve status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://neomelt-b760m-h-ddr4.tail8bd030.ts.net (tailnet only)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|-- /         proxy http://127.0.0.1:8188&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;|-- /outputs/ path  /home/neomelt/ComfyUI/output&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一次请求的完整路径是这样。注意 ComfyUI 从头到尾只监听回环，门开在 tailscaled 上，而 tailscaled 只认自己 tailnet 里的成员：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/tailscale-remote-access/serve-path.svg&quot; alt=&quot;serve 请求路径&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;日常使用&quot;&gt;日常使用&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 远端主机上起服务（&gt;&gt; 追加日志；zsh 开了 noclobber 的话 &gt; 第二次会翻车）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;nohup&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/ComfyUI/start.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/ComfyUI/comfyui.log&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; 2&gt;&amp;#x26;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 停服务（按端口杀，不误伤；pkill 按名字匹配有相对路径的坑）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;fuser&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -k&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; 8188/tcp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 人在家里远程起停：先 SSH 上去，再执行上面两条&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; neomelt@100.94.159.89&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;浏览器收藏两个地址就够了：主界面 &lt;code&gt;https://xxx.ts.net&lt;/code&gt;，出图目录 &lt;code&gt;https://xxx.ts.net/outputs/WAI/&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;怎么知道自己走的是直连还是中继&quot;&gt;怎么知道自己走的是直连还是中继&lt;/h2&gt;
&lt;p&gt;前面推导说打洞成功走 P2P、打不通退 DERP，那自己这条链路实际走的哪种？不用猜，两条命令就能看出来。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tailscale netcheck&lt;/code&gt; 报告本机的网络条件，下面是这台远端主机的实测输出（公网地址已抹掉）：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;* UDP: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;* IPv4: yes, x.x.x.x:52812&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;* MappingVariesByDestIP: false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;* PortMapping:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;* Nearest DERP: Singapore&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;* DERP latency:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - sin: 41.3ms  (Singapore)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - hkg: 76.3ms  (Hong Kong)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - blr: 78.9ms  (Bengaluru)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - tok: 118.4ms (Tokyo)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;要看的就三处。&lt;code&gt;UDP: true&lt;/code&gt; 说明 UDP 出站没被封，这是打洞的前提。&lt;code&gt;MappingVariesByDestIP&lt;/code&gt; 正是前面 EIM / EDM 那个概念的实测判定——&lt;code&gt;false&lt;/code&gt; 表示映射不随目标变化，属于能打洞的那类；这里要是 &lt;code&gt;true&lt;/code&gt;，那就是对称型 NAT，这台机器大概率只能走中继。&lt;code&gt;Nearest DERP&lt;/code&gt; 和那张延迟表是万一走中继时的兜底路径。&lt;/p&gt;
&lt;p&gt;具体某条连接实际走哪，看 &lt;code&gt;tailscale status&lt;/code&gt; 的末列。前面组网验证时那两行末列是 &lt;code&gt;-&lt;/code&gt;，意思是当时没有活跃流量；连接活跃时这一列会变成 &lt;code&gt;active; direct &amp;#x3C;地址:端口&gt;&lt;/code&gt; 或 &lt;code&gt;active; relay &amp;#x3C;节点&gt;&lt;/code&gt;，走中继时还会带上 DERP 节点的城市代号。单独探一条连接则用 &lt;code&gt;tailscale ping 设备名&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;运维速查&quot;&gt;运维速查&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                  # 所有节点在线状态（末列看 direct / relay）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ip&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -4&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                   # 本机 100.x 地址&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; netcheck&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                # 本机网络条件：UDP、NAT 类型、DERP 延迟&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; serve&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            # 当前反代路由表&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; serve&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --https=443&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; off&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;   # 关掉全部反代&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tailscale&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; down&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; up&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;               # 本机断开 / 恢复入网&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;避坑与排障&quot;&gt;避坑与排障&lt;/h2&gt;
&lt;p&gt;下面都是我实际踩过的坑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;serve 第一次运行时看起来像卡住了，其实是在等你去管理台点启用，不是 bug（前面 ComfyUI 一节说过）。&lt;/li&gt;
&lt;li&gt;serve 的配置是持久的，机器重启后反代路由会自动恢复；但被反代的服务本身（ComfyUI）不归它管，得自己拉起来，不然页面 502。&lt;/li&gt;
&lt;li&gt;浏览器的代理插件可能会劫持 &lt;code&gt;.ts.net&lt;/code&gt; 域名，走了代理反而解析失败，把这个域名加进直连规则就好。&lt;/li&gt;
&lt;li&gt;DERP 中继的延迟：&lt;code&gt;netcheck&lt;/code&gt; 实测这台机器最近的节点是新加坡 41.3ms、香港 76.3ms、东京 118.4ms，节点列表里没有中国大陆。但要注意这是&lt;strong&gt;单边到中继的 RTT&lt;/strong&gt;，真走中继时两端各绕一趟，端到端只会比这个数更大。我没实测过完整走中继的链路，具体多少不打包票。打洞成功走 P2P 的体验很好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;页面打不开的时候，按顺序查三层就行：先确认自己这台设备入网了，再确认对面那台机器在线，最后确认它上面的服务还活着。哪一层出的问题很快就能定位出来：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/tailscale-remote-access/troubleshoot.svg&quot; alt=&quot;三步排障&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;最后说说安全&quot;&gt;最后说说安全&lt;/h2&gt;
&lt;p&gt;tailnet 说到底就是”你账号名下的一堆 WireGuard 公钥”，一台设备能不能进来由密钥决定，跟它在哪个网络里没有关系，其实这就是”零信任”这个词的意思。流量全程加密，就算走 DERP 中继，中继手里拿到的也只是密文——私钥从不离开本机，中继没有解密的可能。&lt;/p&gt;
&lt;p&gt;不过”由密钥决定”这句还差一层：公钥的分发是控制面在管的，所以你隐含信任了 Tailscale 的控制面不会往你的 tailnet 里偷偷塞节点。官方文档自己把这个威胁写得很直白——“If Tailscale were malicious, and stealthily inserted new nodes into your network, then Tailscale could send or receive traffic to your existing nodes in plaintext.”。要堵这个口子就得开 tailnet lock：开启之后，新节点必须被你指定的签名节点签过名，其他节点才认它，信任就从 Tailscale 的基础设施移到你自己手上了。个人自用开不开另说，但这层信任在哪得心里有数。&lt;/p&gt;
&lt;p&gt;还有件事我一开始没意识到：你的 &lt;code&gt;ts.net&lt;/code&gt; 域名并不是秘密。serve 的 HTTPS 证书是 Tailscale 替你从 Let’s Encrypt 签的，而公开 CA 签出去的证书都必须写进 Certificate Transparency 日志，这是浏览器强制的要求，本意是让 CA 没法偷偷乱签证书。代价就是证书里的域名也跟着公开了，所以别人在 crt.sh 上搜你的 tailnet 名字，就能把你所有开过 serve 的机器名列出来。&lt;/p&gt;
&lt;p&gt;这件事本身不影响 serve 的安全性，公网上那个名字后面根本没有监听端口，拦住外人的是密钥，不是域名难猜。但它有个实际后果——“反正没人知道我的域名”这层心理防线根本不存在。所以再强调一遍 serve 和 funnel 的区别：serve 只开给 tailnet 内部，funnel 是直接暴露到公网。哪天你手滑给这台机器开了 funnel，域名早就在公开日志里躺着了，被扫到只是时间问题，而 ComfyUI 连登录都没有。这种服务只能用 serve。&lt;/p&gt;
&lt;p&gt;Tailscale 还有一些这篇没用到的功能：ACL（控制哪台设备能访问哪台的哪个端口）、Tailscale SSH、exit node（把全部流量从某台设备出去）、tailnet sharing（把单台设备分享给别人的账号），有需要可以再研究。&lt;/p&gt;
&lt;h2 id=&quot;附环境与版本&quot;&gt;附：环境与版本&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;服务端：Ubuntu 24.04 (noble)，tailscale 1.98.9，2026-07-18 配置&lt;/li&gt;
&lt;li&gt;客户端：Fedora 笔记本 + 手机&lt;/li&gt;
&lt;li&gt;被反代服务：ComfyUI 0.28.0（监听 127.0.0.1:8188）&lt;/li&gt;
&lt;li&gt;网络环境：远端局域网（无公网 IP、无路由器权限）↔ 家庭宽带，实测组网与访问正常&lt;/li&gt;
&lt;li&gt;文中所有命令都在上述环境里实际跑过，&lt;code&gt;netcheck&lt;/code&gt; 那段是服务端的实测输出&lt;/li&gt;
&lt;li&gt;只有 &lt;code&gt;tailscale status&lt;/code&gt; 的 &lt;code&gt;direct&lt;/code&gt; / &lt;code&gt;relay&lt;/code&gt; 那列我没实测到，依据的是官方 CLI 文档&lt;/li&gt;
&lt;/ul&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-07-21T16:17:00.000Z</dc:date><dcterms:modified>2026-07-25T12:12:20.000Z</dcterms:modified><category>工程实践</category><category>Tailscale</category><category>WireGuard</category><category>NAT</category><category>内网穿透</category><category>ComfyUI</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/tailscale-remote-access#comments</comments></item><item><title>关于RM的碎碎念</title><link>https://www.neomelt.cloud/posts/%E5%85%B3%E4%BA%8Erm%E7%9A%84%E7%A2%8E%E7%A2%8E%E5%BF%B5</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/%E5%85%B3%E4%BA%8Erm%E7%9A%84%E7%A2%8E%E7%A2%8E%E5%BF%B5</guid><description>前段时间太忙了没来得及写，周末闲暇来写一下吧</description><pubDate>Sun, 07 Jun 2026 06:10:00 GMT</pubDate><content:encoded>&lt;p&gt;今年是真的作为观众了，现在回想起来25赛季结束的时候发了个空间：
&lt;img src=&quot;https://www.neomelt.cloud/blog/think-about-rm/image.png&quot; alt=&quot;25 赛季结束时发的空间动态：在 RM 赛场看台拍的场地，配文&amp;quot;在现场，新身份（bushi&amp;quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;26赛季前半程我基本都是跟着的，在陪他们烧烤拍完联盟赛完整形态后我就算是彻底的退休了，听他们说后期都没想着能进对抗赛，据说拍完对抗赛的完整形态很多人从心态上就已经崩盘了，甚至都开始写赛季总结了😂，我常常在想：为什么上一年能预见到，再进步一点就能抵达那梦想之地，可经历了一整个赛季的沉浮，却还是只差那么一点？我想了很久，始终想不通。&lt;/p&gt;
&lt;p&gt;技术，管理，资金，人力，无论是从公司还是一个学生机器人组织来看，这几部分都是毋庸置疑的组成基石。如果真的以一种严苛的视角审视这支队伍，基本上每一个角度都说不上优秀，但是对于一群脱产且从来没有接受过体系化的技术、管理的培养的愣头青来说，似乎也无法苛责太多。在这样一个倡导学术至上、基础教育崩塌的大学环境里，注定无法找到很多能够完全沉下心来做工程的人，这也就可以解释为什么每一年都是一些真的想做好、能沉下心做的人做了绝大多数的工作。&lt;/p&gt;
&lt;p&gt;从管理的角度来说其实也不应该去苛责。一个好的管理比一个优秀的技术人员更加难遇到，所以说技术做得好的人不一定是一个好的管理者，这也就解释了为什么看似管得很可以、但是总感觉哪里不太对劲的问题。队里现在形成的思维就是觉得做技术做得好的人应该在打完自己的赛季之后去做管理，但是其实从公司的角度去看，管理的技术水平可以不是很好，或者说从来没做过技术。可学生组织和公司是不一样的，公司那套没办法完全照搬到学生组织上来——首先两者的人才库是完全不同的，对于一群刚刚经历过12年填鸭教育的脱产群体来说，这还是太难了。&lt;/p&gt;
&lt;p&gt;所以至此我得出了一个悲观的结论：没有真正管理过中小型组织的人指导、光靠学生，是很难将一个队伍真正带到一个健康的运作状态的。&lt;/p&gt;
&lt;p&gt;所以，我现在的心态又转变到了个人发展优先的半边——在不完全影响队伍进度的情况下专注于个人技术的精进和职业生涯的发展。我很喜欢一句话：每一个rmer心里都有一座金灿灿的奖杯。rmer应该在意的不一定只是总冠军的奖杯，还可以是那颗总冠军的心，怀着这种心态去想其实比赛输赢也好，各种杂事也好，沟通矛盾也好，似乎都是可以调和的，但是这些终究还是太理想了……&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-06-07T06:10:00.000Z</dc:date><dcterms:modified>2026-07-25T12:57:28.000Z</dcterms:modified><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/%E5%85%B3%E4%BA%8Erm%E7%9A%84%E7%A2%8E%E7%A2%8E%E5%BF%B5#comments</comments></item><item><title>4月总结：忙碌，迷茫，方向，机遇？</title><link>https://www.neomelt.cloud/posts/%E5%9C%A8%E6%96%B0%E7%9A%84%E5%9D%90%E6%A0%87%E9%87%8C</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/%E5%9C%A8%E6%96%B0%E7%9A%84%E5%9D%90%E6%A0%87%E9%87%8C</guid><description>总结这一个月的实习生活</description><pubDate>Fri, 01 May 2026 18:10:00 GMT</pubDate><content:encoded>&lt;p&gt;3月31号，随着南航CZ3670的航班在朦胧的凌晨降落在宝安机场，我开始了我在深圳的实习生活。&lt;/p&gt;
&lt;p&gt;回顾这一个月的经历，莫名的觉得这个四月为何这么漫长，做了好多从未做过的事，见了好多从未见过的人。
第一次坐飞机，第一次一个人在外面租房住，第一次上班，第一次领工资，见了曾经相熟的朋友，还有很多只是在网上熟悉的朋友，和从未有过交集的朋友。从一开始时候的紧张局促到现在的相对平静（也许是班味hh），我个人的感受是比较强烈的。&lt;/p&gt;
&lt;p&gt;短短一个月在两家公司上班，先是在第一家写行为树，但是说实话我对其产品是不抱希望的，所以其实在短短的十二/二十天的时间里，并没有去做很多东西，因为当时没上几天班就有松某机器人的面试，为此还特地请了一个早上的假去面试，面试时间大概一个小时，面试官没有去过多的问技术，甚至聊了半小时天，聊比赛以及学习经历的事情，当时自我感觉面试体验良好，估计有戏，说一周后会有结果，但是两周才出感谢信，虽然当时已经被拒麻了，但是真被拒了感觉还是很难受的，那天结束后我难受了一个周末，也早思考究竟是不是自己不适合去做软件研发，是不是不是公司想要的人才。想了好久我也想通了，降低期待是最好的选择，坚定的去走系统工程师的方向。后来又过了几天，前面面过的一家公司被捞起来了，面试流程推的很快，面试也没有问很多技术上的东西，倒是问了很多方法论的东西，面试官问我想不想来做测开，我说可以，因为我现在最要紧的是了解业界的机器人业务流程，想做软件可以后面慢慢沉淀。面完就oc了，晚上发了书面offer,然后约定的4.22入职，一整个流程相当快，在现在这家的短短一周时间（有效工作时间），我认知到了我的贫瘠，逼迫我更多的从产品角度去思考。&lt;/p&gt;
&lt;p&gt;目前的岗位只有我一个实习生，这是困难，也是机遇，我必须把握，和团队里的伙伴更好的交流沟通去共同做好我们的产品。我很希望在这家有潜力的，年轻的公司转正并且继续工作下去，当然我更希望能去干软件的工作。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-05-01T18:10:00.000Z</dc:date><dcterms:modified>2026-05-01T19:05:45.000Z</dcterms:modified><category>总结</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/%E5%9C%A8%E6%96%B0%E7%9A%84%E5%9D%90%E6%A0%87%E9%87%8C#comments</comments></item><item><title>一次安装windows的记录</title><link>https://www.neomelt.cloud/posts/%E4%B8%80%E6%AC%A1%E5%AE%89%E8%A3%85windows%E7%9A%84%E8%AE%B0%E5%BD%95</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/%E4%B8%80%E6%AC%A1%E5%AE%89%E8%A3%85windows%E7%9A%84%E8%AE%B0%E5%BD%95</guid><pubDate>Sun, 29 Mar 2026 14:10:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前言&quot;&gt;前言&lt;/h1&gt;
&lt;p&gt;由于必须要去做office相关的工作，而linux对其的支持有极差，正好博主的游戏本坏了，也没打算再修，所以干脆把990pro拆下来装到tb上用来做Windows的载体。&lt;/p&gt;
&lt;h1 id=&quot;镜像&quot;&gt;镜像&lt;/h1&gt;
&lt;p&gt;由于博主是linux系统，不太好做系统盘，所以让朋友帮忙做了一个win11专业工作站版的镜像&lt;/p&gt;
&lt;p&gt;如果不懂镜像怎么做的朋友可以找其他资料自行制作&lt;/p&gt;
&lt;h1 id=&quot;安装&quot;&gt;安装&lt;/h1&gt;
&lt;p&gt;这一步没什么好说的，就是点点点&lt;/p&gt;
&lt;h1 id=&quot;驱动安装&quot;&gt;驱动安装&lt;/h1&gt;
&lt;p&gt;由于新装的系统是没有任何驱动的，所以需要去用usb有线联网更新Windows去自动补全驱动&lt;/p&gt;
&lt;h1 id=&quot;windows的激活&quot;&gt;windows的激活&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;一个刷到的邪修：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在Windows的cmd(管理员)里依次输入下面三行命令即可激活Windows专业工作站版本：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;cmd&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slmgr /ipk NRG8B&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;VKK3Q&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;CXVCJ&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;9G2XF&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;6Q84J&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slmgr /skms kms.03k.org&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slmgr /ato&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;专业版密钥可以看另一个视频：&lt;/p&gt;
&lt;div class=&quot;video-wrap&quot;&gt;&lt;iframe src=&quot;https://player.bilibili.com/player.html?bvid=BV1tUXXYvE4L&amp;#x26;p=1&amp;#x26;isOutside=true&amp;#x26;aid=114086461315908&amp;#x26;cid=28635956498&quot; title=&quot;Bilibili video player&quot; loading=&quot;lazy&quot; scrolling=&quot;no&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-03-29T14:10:00.000Z</dc:date><dcterms:modified>2026-03-29T14:57:52.000Z</dcterms:modified><category>小妙招</category><category>记录</category><category>Windows</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/%E4%B8%80%E6%AC%A1%E5%AE%89%E8%A3%85windows%E7%9A%84%E8%AE%B0%E5%BD%95#comments</comments></item><item><title>Gazebo 仿真中的 z-fighting 问题记录</title><link>https://www.neomelt.cloud/posts/gazebo-z-fighting-note</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/gazebo-z-fighting-note</guid><description>记录一次 Gazebo 仿真中灯条闪烁问题的排查过程，原因是 SDF 模型中共面几何引起的 z-fighting。</description><pubDate>Mon, 16 Mar 2026 08:49:00 GMT</pubDate><content:encoded>&lt;p&gt;今天在 Gazebo 里调一个仿真模型时，遇到了一个显示问题：车体上的灯条只有在差不多正对着看的时候才显示得比较完整，一旦视角稍微偏一点，边缘就像缺了一块，转动镜头的时候还会忽隐忽现，大概像这样：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/gazebo-z-fighting-note/1.png&quot; alt=&quot;Gazebo 中灯条闪烁的现象&quot;&gt;&lt;/p&gt;
&lt;p&gt;可以看到当我们转动视角之后部分灯条会消失，一开始我怀疑的是材质或者光照。因为这个灯条本身用了 &lt;code&gt;emissive&lt;/code&gt;，看起来像是“自发光”的部件，所以第一反应会觉得是不是 Gazebo / Ogre2 对这种材质的表现不太稳定。但后面仔细看现象之后，发现问题其实不在光照，而在几何本身。&lt;/p&gt;
&lt;h2 id=&quot;现象&quot;&gt;现象&lt;/h2&gt;
&lt;p&gt;这个问题最明显的表现有几个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只有接近正视角时灯条显示还算完整&lt;/li&gt;
&lt;li&gt;一旦转动视角，灯条表面开始闪烁&lt;/li&gt;
&lt;li&gt;有时边缘会变细，像是被削掉了一层&lt;/li&gt;
&lt;li&gt;有时会出现局部破碎或者忽隐忽现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;查了一下资料，也顺手问了 GPT，才知道这种“跟着视角变化一起抖”的问题，其实很像经典的 &lt;code&gt;z-fighting&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&quot;排查过程&quot;&gt;排查过程&lt;/h2&gt;
&lt;p&gt;回头看模型结构之后，问题很快就对上了。&lt;/p&gt;
&lt;p&gt;前装甲板在 &lt;code&gt;model.sdf&lt;/code&gt; 第 84 行附近，厚度写的是 &lt;code&gt;0.012&lt;/code&gt;，所以它的前表面在局部坐标里相当于 &lt;code&gt;x = +0.006&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;前灯条在 &lt;code&gt;model.sdf&lt;/code&gt; 第 93 行附近，中心偏移是 &lt;code&gt;x = 0.003&lt;/code&gt;，自身厚度是 &lt;code&gt;0.006&lt;/code&gt;，所以它的前表面也是 &lt;code&gt;x = +0.006&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这就意味着，灯条的外表面和装甲板的外表面正好压在同一个位置上。更准确地说，灯条其实有一部分嵌进了装甲板里，只把最外面那一层面和外壳表面重合了。&lt;/p&gt;
&lt;p&gt;后、左、右几个灯条也基本是同样的写法，所以会一起中招。&lt;/p&gt;
&lt;h2 id=&quot;原因&quot;&gt;原因&lt;/h2&gt;
&lt;p&gt;这个问题本质上不是“谁的世界坐标更靠前”那么简单。&lt;/p&gt;
&lt;p&gt;GPU 在渲染的时候，会对每个像素做深度比较。屏幕上的每个像素都有一个 depth buffer，用来记录当前离相机最近的片元。&lt;/p&gt;
&lt;p&gt;问题在于这个深度值不是无限精确的。常见深度缓冲精度只有 24 bit 左右，而且经过透视投影之后，深度分布本身还是非线性的。&lt;/p&gt;
&lt;p&gt;如果两个面非常接近，甚至干脆共面，那么它们投影到同一个像素时，深度值就会接近到深度缓冲分不清谁前谁后。结果就是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有时这个面通过深度测试&lt;/li&gt;
&lt;li&gt;有时另一个面通过深度测试&lt;/li&gt;
&lt;li&gt;相机一转，投影关系和像素覆盖变化之后，显示结果也跟着跳&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这就是 &lt;code&gt;z-fighting&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这里顺手放一张 wiki 对 &lt;code&gt;z-fighting&lt;/code&gt; 的解释图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/gazebo-z-fighting-note/2.png&quot; alt=&quot;wiki 中对 z-fighting 的说明&quot;&gt;&lt;/p&gt;
&lt;p&gt;一句话概括就是：两个几乎贴在一起的面，在深度缓冲里抢前后顺序。&lt;/p&gt;
&lt;h3 id=&quot;为什么一转视角更明显&quot;&gt;为什么一转视角更明显&lt;/h3&gt;
&lt;p&gt;这个现象特别容易让人误判成“材质闪了”或者“光照不稳定”，但其实它和视角变化强相关，是因为深度比较发生在投影之后的屏幕空间里。&lt;/p&gt;
&lt;p&gt;相机一转，同一个三角形会落到不同像素上，每个像素的深度量化结果也会变，所以原本勉强还能显示的两个面，就开始交替抢占可见性，表现出来就是闪烁、缺块和边缘抖动。&lt;/p&gt;
&lt;p&gt;如果物体离得更远、场景尺度更大，或者相机的 &lt;code&gt;far clip / near clip&lt;/code&gt; 比例很夸张，这种问题通常还会更明显。&lt;/p&gt;
&lt;h2 id=&quot;gazebo-仿真的局限性&quot;&gt;Gazebo 仿真的局限性&lt;/h2&gt;
&lt;p&gt;这里顺手记一下一个容易混淆的点。&lt;/p&gt;
&lt;p&gt;灯条用了 &lt;code&gt;emissive&lt;/code&gt;，它更接近“这个材质自己看起来是亮的”，并不等价于“它真的会像灯一样照亮周围环境”。&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“没有真实泛光、照不到环境”这件事，确实和 Gazebo / Ogre2 的材质表现有关&lt;/li&gt;
&lt;li&gt;“转视角时灯条破碎、闪动、变细”这件事，核心是几何面重合导致的 &lt;code&gt;z-fighting&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这两个现象可能同时出现，但不是同一个问题。&lt;/p&gt;
&lt;h2 id=&quot;解决办法&quot;&gt;解决办法&lt;/h2&gt;
&lt;p&gt;这个问题最稳的修法其实很简单，就是不要让两个面重合，给它们留一个很小的间距。&lt;/p&gt;
&lt;p&gt;比如这几个灯条的位置，可以把原本贴得太近的偏移量稍微往外挪一点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前灯条从 &lt;code&gt;0.003&lt;/code&gt; 改到 &lt;code&gt;0.007&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;后灯条从 &lt;code&gt;-0.003&lt;/code&gt; 改到 &lt;code&gt;-0.007&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;左右两侧同理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样灯条会从装甲板表面稍微“抬出来”一点点。这个量级通常 1 到 2 mm 就够了，肉眼几乎看不出来，但深度缓冲已经能稳定区分两个面了。&lt;/p&gt;
&lt;p&gt;另一类办法是用 &lt;code&gt;depth bias&lt;/code&gt; 或者 &lt;code&gt;polygon offset&lt;/code&gt;，有些引擎在做 decal、标记层时会这样处理。不过在普通 SDF 模型里，直接把几何错开一点通常更稳，也更直观。&lt;/p&gt;
&lt;p&gt;修好效果&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/gazebo-z-fighting-note/3.png&quot; alt=&quot;修复后的 Gazebo 视图：底盘装甲板上的红色灯条稳定渲染，不再闪烁&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/gazebo-z-fighting-note/4.png&quot; alt=&quot;低机位特写：装甲板与灯条边缘干净利落，深度冲突消失&quot;&gt;&lt;/p&gt;
&lt;p&gt;虽然真实装甲板和灯条的上表面本来就可能非常接近，但在真实世界里，这点差异通常不会像仿真里这样被放大。这大概也是仿真和现实之间一个很典型的小区别。&lt;/p&gt;
&lt;h2 id=&quot;经验总结&quot;&gt;经验总结&lt;/h2&gt;
&lt;p&gt;这次问题本身不算复杂，但确实很值得记一下。&lt;/p&gt;
&lt;p&gt;以后在搭仿真的时候如果看到下面这种现象：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型表面某一层东西贴着底面&lt;/li&gt;
&lt;li&gt;转视角时开始闪&lt;/li&gt;
&lt;li&gt;边缘抖动、缺块、忽隐忽现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那就可以优先往这几个方向查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先查是不是共面或者几乎共面&lt;/li&gt;
&lt;li&gt;再查是不是相机 near / far clip 导致深度精度不够&lt;/li&gt;
&lt;li&gt;最后再去怀疑材质、光照或者驱动&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;像灯条、铭牌、装饰片、UI 面板、地面标线这种“贴表面”的结构，只要两层面重合，就迟早会遇到 &lt;code&gt;z-fighting&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这算是一个很典型的图形学老问题。不是 Gazebo 独有，也不是老引擎才会有。只要还是光栅化渲染、还是有限深度精度，这个坑就一直都在。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-03-16T08:49:00.000Z</dc:date><dcterms:modified>2026-07-25T12:57:28.000Z</dcterms:modified><category>开发记录</category><category>Gazebo</category><category>仿真</category><category>SDF</category><category>z-fighting</category><category>渲染</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/gazebo-z-fighting-note#comments</comments></item><item><title>一次把 OpenClaw 从连环报错拉回可用：sub2api + Telegram 实战排障复盘</title><link>https://www.neomelt.cloud/posts/openclaw-sub2api-telegram-recovery</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/openclaw-sub2api-telegram-recovery</guid><description>从 No API key、403 blocked 到 Telegram pairing 的完整修复过程，含可复用配置与排障思路。</description><pubDate>Thu, 26 Feb 2026 11:04:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇文章记录一次完整的排障过程，目标是把 OpenClaw 从多错并发的状态恢复至可用。&lt;/p&gt;
&lt;p&gt;最终结果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;No API key found for provider &quot;openai-codex&quot;&lt;/code&gt; 不再出现。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sub2api / gpt-5.3-codex&lt;/code&gt; 能正常返回内容，403 解除。&lt;/li&gt;
&lt;li&gt;Telegram 机器人完成配对后可稳定对话。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了后续复用，把排障拆成两条主线：模型链路、Telegram 链路。&lt;/p&gt;
&lt;h2 id=&quot;故障现象&quot;&gt;故障现象&lt;/h2&gt;
&lt;p&gt;初始日志中持续出现三类报错：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;No API key found for provider &quot;openai-codex&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;telegram deleteWebhook failed: Network request for &apos;deleteWebhook&apos; failed!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;telegram setMyCommands failed: Network request for &apos;setMyCommands&apos; failed!&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以及一条权限相关提示（后续步骤中用到）：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;security audit: device access upgrade requested ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这三类错误不是同一根因，需要分开处理。&lt;/p&gt;
&lt;h2 id=&quot;三个初始误判&quot;&gt;三个初始误判&lt;/h2&gt;
&lt;p&gt;先把错误判断列出来，这比”最终答案”更有参考价值。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;看到 &lt;code&gt;No API key&lt;/code&gt; 就认为是 key 本身无效。&lt;/li&gt;
&lt;li&gt;看到 &lt;code&gt;403 blocked&lt;/code&gt; 就认为是 key 或 model 名配置错误。&lt;/li&gt;
&lt;li&gt;看到 Telegram 网络失败，认为 shell 中的代理变量已经够用。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这三个判断后来都被逐一推翻。&lt;/p&gt;
&lt;h2 id=&quot;第一阶段no-api-key-是路由与-auth-schema-问题&quot;&gt;第一阶段：&lt;code&gt;No API key&lt;/code&gt; 是路由与 auth schema 问题&lt;/h2&gt;
&lt;h3 id=&quot;先看运行时而不是静态配置&quot;&gt;先看运行时，而不是静态配置&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; models&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这一步的关键不在于核对 key 的值，而是确认当前会话实际走的 provider 路径。
输出中仍然存在 &lt;code&gt;openai-codex&lt;/code&gt; 残留路径被尝试，说明问题不是”没写 key”，而是”系统在尝试走一个已被废弃的 provider”。&lt;/p&gt;
&lt;h3 id=&quot;auth-profilesjson-有内容不代表能被当前版本正确读取&quot;&gt;&lt;code&gt;auth-profiles.json&lt;/code&gt; 有内容不代表能被当前版本正确读取&lt;/h3&gt;
&lt;p&gt;当时文件中有内容，但结构不符合当前版本的识别格式。整理后的结构（脱敏）：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;version&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;profiles&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;provider:xxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;api_key&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;provider&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;xxx&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;key&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;sk-***&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;lastGood&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;usageStats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;处理步骤：先验证 schema 能被正常读取，再把不再使用的 provider 彻底移除，避免旧残留干扰路由。&lt;/p&gt;
&lt;h3 id=&quot;模型侧的最终收敛&quot;&gt;模型侧的最终收敛&lt;/h3&gt;
&lt;p&gt;只保留 &lt;code&gt;sub2api/gpt-5.3-codex&lt;/code&gt; 这一条可用路径。
多个 provider 并存时，session 实际走的路径和预期可能不一致，排障结论因此失效。&lt;/p&gt;
&lt;h2 id=&quot;第二阶段403-blocked-是上游策略拦截而非-key-错误&quot;&gt;第二阶段：&lt;code&gt;403 blocked&lt;/code&gt; 是上游策略拦截，而非 key 错误&lt;/h2&gt;
&lt;p&gt;这是整次排障中最不直观的部分。&lt;/p&gt;
&lt;h3 id=&quot;排除-key-错误的方法&quot;&gt;排除 key 错误的方法&lt;/h3&gt;
&lt;p&gt;用同一把 key 分别测模型枚举接口和推理接口：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;枚举接口（&lt;code&gt;GET /v1/models&lt;/code&gt;）：正常返回&lt;/li&gt;
&lt;li&gt;推理接口（&lt;code&gt;POST /v1/responses&lt;/code&gt;）：返回 403&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;结论：不是完全鉴权失败，而是特定类型的请求被上游策略拒绝。&lt;/p&gt;
&lt;h3 id=&quot;定位到-user-agent-的过程&quot;&gt;定位到 User-Agent 的过程&lt;/h3&gt;
&lt;p&gt;控制变量：同一 endpoint、同一 key、同一 body，仅修改请求头。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SDK 风格 UA：403&lt;/li&gt;
&lt;li&gt;&lt;code&gt;curl/8.5.0&lt;/code&gt; UA：正常返回&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以确认：上游对客户端指纹（UA）存在拦截策略，并非账号或模型配置问题。&lt;/p&gt;
&lt;h3 id=&quot;修复方案&quot;&gt;修复方案&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;sub2api&lt;/code&gt; provider 配置中显式覆盖 User-Agent：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;models&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;providers&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sub2api&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;        &quot;headers&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;          &quot;User-Agent&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;curl/8.5.0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用新 session 验证：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agent&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --agent&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --session-id&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ne&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;w&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --message&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;回复ok&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回正常内容，模型链路收口。&lt;/p&gt;
&lt;h2 id=&quot;第三阶段telegram-网络失败是进程环境边界问题&quot;&gt;第三阶段：Telegram 网络失败是进程环境边界问题&lt;/h2&gt;
&lt;p&gt;shell 中已配置代理，但 gateway 依旧报 &lt;code&gt;Network request failed&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;原因在于：gateway 是 systemd 用户服务，并非当前终端的子进程。
在 shell 中 &lt;code&gt;export HTTP_PROXY&lt;/code&gt; 不会注入到已运行的 systemd service 进程。&lt;/p&gt;
&lt;p&gt;解决方法是直接在通道配置中写入显式代理：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;channels&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;telegram&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;dmPolicy&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pairing&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;botToken&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;8775***&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;proxy&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;http://127.0.0.1:7897&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启后日志中 &lt;code&gt;setMyCommands/deleteWebhook&lt;/code&gt; 不再循环报错。&lt;/p&gt;
&lt;h2 id=&quot;容易遗漏的步骤设备权限批准&quot;&gt;容易遗漏的步骤：设备权限批准&lt;/h2&gt;
&lt;p&gt;如果日志中已出现 scope upgrade request，需要执行设备批准：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; devices&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; approve&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这一步缺失会导致 CLI 与 gateway 之间的连接持续被拒。&lt;/p&gt;
&lt;h2 id=&quot;dmpolicy--pairing-时机器人只回配对码是预期行为&quot;&gt;&lt;code&gt;dmPolicy = &quot;pairing&quot;&lt;/code&gt; 时机器人只回配对码是预期行为&lt;/h2&gt;
&lt;p&gt;首次私聊时，机器人只返回 user id 和 pairing code，这不是故障。&lt;/p&gt;
&lt;p&gt;拿到 code 后执行批准命令：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;openclaw&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pairing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; approve&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; telegram&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; UCJPTR6U&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;批准完成后，后续消息才会进入正常会话。&lt;/p&gt;
&lt;h2 id=&quot;排障方法论总结&quot;&gt;排障方法论总结&lt;/h2&gt;
&lt;p&gt;这次排障暴露了一个常见误区：按报错文案的字面含义直接修改配置，而不验证实际的运行时状态。&lt;/p&gt;
&lt;p&gt;更可靠的做法分四步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先确认运行时的实际路由，而非只看静态配置文件。&lt;/li&gt;
&lt;li&gt;将”本地读取问题”与”上游拒绝问题”分开验证。&lt;/li&gt;
&lt;li&gt;对模糊错误（如 403）做最小变量实验，逐一排除 UA、endpoint、body 的影响。&lt;/li&gt;
&lt;li&gt;涉及 systemd 服务时，不依赖 shell 环境继承，所有配置显式写入。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;报错文案是排障入口，不是结论。&lt;/p&gt;
&lt;h2 id=&quot;安全提醒&quot;&gt;安全提醒&lt;/h2&gt;
&lt;p&gt;排障过程中出现过真实 key 和 token，文章内已做脱敏处理。
修复完成后建议对相关凭据做一次轮换，这不是流程形式，而是降低实际泄漏风险的必要动作。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-02-26T11:04:00.000Z</dc:date><dcterms:modified>2026-02-26T13:52:00.000Z</dcterms:modified><category>工程实践</category><category>OpenClaw</category><category>sub2api</category><category>Telegram Bot</category><category>排障</category><category>工程复盘</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/openclaw-sub2api-telegram-recovery#comments</comments></item><item><title>从 GitHub Pages 到 Vercel 镜像：以及 Giscus -&gt; Waline 评论迁移实录</title><link>https://www.neomelt.cloud/posts/vercel-waline-migration</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/vercel-waline-migration</guid><description>把博客改成双平台发布，并把评论系统从 Giscus 迁到 Waline 的一次实战记录。</description><pubDate>Mon, 23 Feb 2026 09:46:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇是一次比较实用的站点改造记录：我把博客从单一 GitHub Pages 发布，改成了 GitHub Pages + Vercel 双平台；同时把评论系统从 Giscus 换成 Waline。&lt;/p&gt;
&lt;p&gt;中间没什么“高大上设计”，就是一路踩坑一路修。把关键决策和坑点记下来，后面自己维护也省事。&lt;/p&gt;
&lt;h2 id=&quot;先说结果&quot;&gt;先说结果&lt;/h2&gt;
&lt;p&gt;现在线上是这个状态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;www.neomelt.cloud&lt;/code&gt; 走 Vercel（主站）。&lt;/li&gt;
&lt;li&gt;GitHub Pages 继续保留，作为镜像发布链路。&lt;/li&gt;
&lt;li&gt;评论系统已经切到 Waline，文章页和列表页都能显示阅读量/评论数。&lt;/li&gt;
&lt;li&gt;计数路径做了统一，不会再出现“同一篇文章两套数据”。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;为什么要加-vercel而不是只用-github-pages&quot;&gt;为什么要加 Vercel，而不是只用 GitHub Pages&lt;/h2&gt;
&lt;p&gt;GitHub Pages 本身没问题，我原来也是一直这么跑。&lt;br&gt;
这次加 Vercel，主要是两个原因：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;自定义域名和部署体验更直接，跟 Astro 的适配也顺手。&lt;/li&gt;
&lt;li&gt;想保留两条发布链路，某个平台抽风时不至于整站都挂。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里有个经常让人误解的点：&lt;br&gt;
&lt;strong&gt;一个域名主机名在 DNS 上只能主要指向一个平台。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;也就是说 &lt;code&gt;www.neomelt.cloud&lt;/code&gt; 不可能同时“直接”指向 Vercel 和 GitHub Pages。&lt;br&gt;
如果想做镜像，正确姿势是不同子域名分流，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;www.neomelt.cloud&lt;/code&gt; -&gt; Vercel&lt;/li&gt;
&lt;li&gt;&lt;code&gt;neomelt.cloud&lt;/code&gt; -&gt; GitHub Pages&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2026-07-25 更新&lt;/strong&gt;：上面的分流姿势最后没有落地，也不打算落了。现状是 &lt;code&gt;neomelt.cloud&lt;/code&gt; 由 Vercel 做 308 跳转到 &lt;code&gt;www&lt;/code&gt;，GitHub Pages 没绑自定义域名，镜像只在 &lt;code&gt;neomelt.github.io/Neomelt_blog/&lt;/code&gt; 可达。维持单入口的理由：全站流通的链接（分享、搜索收录、RSS）全是 &lt;code&gt;www&lt;/code&gt;，Vercel 真挂的时候裸域上的镜像救不了这些链接，不如把 github.io 地址当冷备手动发出去，还省一条要维护的部署链路。镜像仍跟着 Actions 自动部署。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;这次部署层面我改了什么&quot;&gt;这次部署层面我改了什么&lt;/h2&gt;
&lt;p&gt;站点构建主流程其实没大动，GitHub Actions 还是保留。&lt;br&gt;
只补了一个关键环境变量，保证 Pages 构建时也能拿到 Waline 地址：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;env&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  PUBLIC_WALINE_SERVER_URL&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;${{ vars.PUBLIC_WALINE_SERVER_URL || secrets.PUBLIC_WALINE_SERVER_URL }}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vercel 这边我没走“再套一层 GitHub Action 推送”，直接让 Vercel 连 Git 仓库自动部署，链路更短，也更不容易出幺蛾子。&lt;/p&gt;
&lt;h2 id=&quot;giscus---waline为什么换怎么换&quot;&gt;Giscus -&gt; Waline：为什么换，怎么换&lt;/h2&gt;
&lt;p&gt;我换 Waline 的主要考虑是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想要更可控的后端配置，不完全绑在 GitHub Discussions。&lt;/li&gt;
&lt;li&gt;以后做评论能力扩展（比如表情、策略、审核）会更灵活。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代码上核心就三块。&lt;/p&gt;
&lt;p&gt;第一块是评论组件本体，重写 &lt;code&gt;Comments.astro&lt;/code&gt;，直接用 Waline client 初始化：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  el: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;#waline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  serverURL,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  path: walinePath,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  pageview: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  comment: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;serverURL&lt;/code&gt; 从 &lt;code&gt;PUBLIC_WALINE_SERVER_URL&lt;/code&gt; 读取，这样本地和线上都能通过环境变量切换。&lt;/p&gt;
&lt;p&gt;第二块是计数组件，我加了一个 &lt;code&gt;WalineCounter.astro&lt;/code&gt;。&lt;br&gt;
因为列表页没有评论输入框，但我又想显示文章浏览量和评论数，所以把计数逻辑拆出来单独跑。&lt;/p&gt;
&lt;p&gt;第三块是路径标准化。&lt;br&gt;
这个问题不处理的话，数据一定会裂开：比如同一篇文章从 &lt;code&gt;/blog/xxx&lt;/code&gt; 和 &lt;code&gt;/posts/xxx&lt;/code&gt; 进去，会被 Waline 记成两个 path。&lt;/p&gt;
&lt;p&gt;我最后统一映射到 &lt;code&gt;/posts/...&lt;/code&gt;：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; getWalinePathForPost&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  postId&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  collection&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;blog&quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;zueg&quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;blog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; basePath&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    collection &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;zueg&quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; `/posts/zueg/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;postId&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; `/posts/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;postId&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; normalizeWalinePath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(basePath);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;另外我把 emoji 包也换了，加入了 bilibili 那套，界面观感比默认的好不少。&lt;/p&gt;
&lt;h2 id=&quot;这次最关键的坑&quot;&gt;这次最关键的坑&lt;/h2&gt;
&lt;h3 id=&quot;1-waline-api-403&quot;&gt;1) Waline API 403&lt;/h3&gt;
&lt;p&gt;这个坑花的时间最多。&lt;br&gt;
现象是后端明明起了，但前端请求一直被拒。最后定位到 &lt;code&gt;SECURE_DOMAINS&lt;/code&gt; 配置和当前访问域名不匹配，导致被拦。&lt;/p&gt;
&lt;p&gt;结论很简单：&lt;br&gt;
域名白名单必须和你真实访问域名一一对应，差一个都可能 403。&lt;/p&gt;
&lt;h3 id=&quot;2-管理后台初始化&quot;&gt;2) 管理后台初始化&lt;/h3&gt;
&lt;p&gt;Waline 首次初始化需要走：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/ui/register&lt;/code&gt;（首个管理员）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/ui/profile&lt;/code&gt;（确认登录状态）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步如果卡住，我建议按这个顺序查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;后端环境变量有没有真正生效。&lt;/li&gt;
&lt;li&gt;前端 &lt;code&gt;PUBLIC_WALINE_SERVER_URL&lt;/code&gt; 是否写对。&lt;/li&gt;
&lt;li&gt;浏览器缓存/Cookie 是否残留旧状态。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;3-页面出现两组统计数字&quot;&gt;3) 页面出现两组统计数字&lt;/h3&gt;
&lt;p&gt;我自己还踩了个前端层面的坑：页面同时渲染了两组统计文案（中英文各一行），看起来像“数字对不上”。&lt;br&gt;
最后直接删掉重复行，只保留一组统计展示，问题就消失了。&lt;/p&gt;
&lt;h3 id=&quot;4-安卓-qq-内置浏览器看不到评论框&quot;&gt;4) 安卓 QQ 内置浏览器看不到评论框&lt;/h3&gt;
&lt;p&gt;这个坑挺隐蔽：Edge 和 Android 系统浏览器都正常，只有 QQ 内置浏览器不显示评论。&lt;br&gt;
最后定位到前端加载方式兼容性问题。&lt;/p&gt;
&lt;p&gt;我原来是这样加载 Waline 的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;script type=&quot;module&quot;&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;动态 &lt;code&gt;import(&quot;https://unpkg.com/...&quot;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套在某些 X5 内核环境下会直接不执行，结果就是评论节点一直空白。&lt;br&gt;
最终修法是改成 &lt;code&gt;UMD&lt;/code&gt; 版本，并加双 CDN 回退：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首选 &lt;code&gt;unpkg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;失败后自动切 &lt;code&gt;jsdelivr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后续又补了一层本地兜底：把 &lt;code&gt;waline.umd.js&lt;/code&gt; 和 &lt;code&gt;waline.css&lt;/code&gt; 放到站点 &lt;code&gt;public/vendor&lt;/code&gt;，前端先尝试同源加载，再走 CDN。&lt;br&gt;
这样即使 QQ 内置浏览器对第三方 CDN 抽风，也不至于整块评论直接消失。&lt;/p&gt;
&lt;p&gt;最终这次调整上线后，&lt;code&gt;neomelt.cloud&lt;/code&gt; 和 &lt;code&gt;www.neomelt.cloud&lt;/code&gt; 在安卓 QQ 内置浏览器里都已经能正常显示评论区。&lt;br&gt;
到这一步，我把评论加载策略就固定成了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同源本地静态资源优先（&lt;code&gt;/vendor/waline.umd.js&lt;/code&gt;、&lt;code&gt;/vendor/waline.css&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;外部 CDN 仅作为回退路径&lt;/li&gt;
&lt;li&gt;加载失败时给出页面内可见提示，不再静默失败&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;现在这套方案的取舍&quot;&gt;现在这套方案的取舍&lt;/h2&gt;
&lt;p&gt;优点很直接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;发布链路不再单点。&lt;/li&gt;
&lt;li&gt;评论系统可控性更高。&lt;/li&gt;
&lt;li&gt;统计口径统一，数据可信度更高。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代价也有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配置项明显变多（尤其是域名和环境变量）。&lt;/li&gt;
&lt;li&gt;排障复杂度上升，需要同时看前端、部署平台、Waline 后端。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总体上我觉得这次改造是值得的，维护成本可接受，收益也足够大。&lt;/p&gt;
&lt;p&gt;如果你也在做类似迁移，我的建议是：&lt;br&gt;
先把“路径统一策略”和“环境变量命名”定下来，再动部署，不然很容易边改边乱。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-02-23T09:46:00.000Z</dc:date><dcterms:modified>2026-07-25T13:23:00.000Z</dcterms:modified><category>工程实践</category><category>Astro</category><category>Vercel</category><category>GitHub Pages</category><category>Waline</category><category>部署</category><category>评论系统</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/vercel-waline-migration#comments</comments></item><item><title>关于计算机技术的一些想法</title><link>https://www.neomelt.cloud/posts/%E5%85%B3%E4%BA%8Ecoding%E7%9A%84%E4%B8%80%E4%BA%9B%E6%83%B3%E6%B3%95</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/%E5%85%B3%E4%BA%8Ecoding%E7%9A%84%E4%B8%80%E4%BA%9B%E6%83%B3%E6%B3%95</guid><description>最近看了很多东西，也想了很多，将自己的心流记录下来</description><pubDate>Thu, 19 Feb 2026 16:14:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;代码是高优先级工具创造-vs-重复&quot;&gt;代码是高优先级工具（创造 vs 重复）&lt;/h2&gt;
&lt;p&gt;我一直都在思考并且寻找一个问题的答案—如何变成一个很厉害的人也就是其他人口中的—大佬。&lt;/p&gt;
&lt;p&gt;为此我付出了两年的时间来实践，探索，却总是没能找到一个完美的，或者说能说服我的答案。
直到最近重新恢复了阅读以及看了很多大佬的履历后心中才慢慢有了一点感悟。&lt;/p&gt;
&lt;p&gt;那就是真正的将代码当作自己处理事情的一种高优先级工具。以及保有对世界的热爱与好奇。&lt;/p&gt;
&lt;p&gt;(PS:每次开始码字就累，算了，今天先歇会儿吧，反正也不着急，想法也不算很成熟)&lt;/p&gt;
&lt;p&gt;—2.18续&lt;/p&gt;
&lt;p&gt;换了输入法后才感觉码字舒服点了。结合最近对于 vibecoding 的新看法，以及为什么有的人能够做到年薪百万且上班不累，有的人却在996且收入不高（感觉该叠甲了2333，没有歧视的意思，单纯在思考这个现象，有看到的人就当我瞎说了），其实这在于他们工作的性质不同：有的人是在创造，而有的人却是在做机械化的重复劳动。&lt;/p&gt;
&lt;p&gt;机械劳动与创造性工作，本质上的区别在于“杠杆率”。机械化劳动是没有杠杆的，你的时间卖了一次就没了；而创造性劳动自带极高的杠杆。&lt;/p&gt;
&lt;p&gt;就像前面所说的，把代码当成解决现实问题的工具。这种“杠杆”在实际开发中非常具体：&lt;/p&gt;
&lt;p&gt;觉得 htop 看不出历史趋势、不够直观时，我没有选择死盯着跳动的数字，而是随手用 Rust 写了一个带曲线的 Linux 显卡监视器；&lt;/p&gt;
&lt;p&gt;发现队员们需要频繁去刷 RoboMaster 论坛学习开源技术时，用 Go 写了一个爬虫，把个人的技术能力转化成了团队获取资讯的自动化流水线；&lt;/p&gt;
&lt;p&gt;或者，在调试复杂的机器人底层硬件和算法时，我不再忍受沉默的终端黑框框和令人抓狂的延迟，而是直接动手造了一个属于自己的零拷贝低延迟的可视化调参软件（PulseScope—尚在开发中）。&lt;/p&gt;
&lt;p&gt;这些动作，就是把“重复劳动”抽象成了“创造性工具”。大佬们之所以厉害，是因为他们一直在写能帮自己（甚至帮别人）干活的代码，用工具把自己的能力放大了成百上千倍。最近流行的 vibecoding，其实也是在强调这种摆脱机械的语法束缚，直接进入“创造心流”的状态。&lt;/p&gt;
&lt;h2 id=&quot;保有对世界的热爱与好奇&quot;&gt;保有对世界的热爱与好奇&lt;/h2&gt;
&lt;p&gt;这是最核心的内驱力。无论是去啃那些硬核的计算机底层原理，还是去构思一个复杂的架构设计，如果没有纯粹的好奇心，在这个过程中只会感到痛苦和枯燥。&lt;/p&gt;
&lt;p&gt;很多时候，驱使我去折腾一项新技术的，并不是什么宏大的目标，或者功利性的任务，而仅仅是一个简单的念头：“这玩意好像很好玩，是怎么跑起来的？我能不能把它拆了自己重构一个更好的？”&lt;/p&gt;
&lt;p&gt;回想一下自己这几年折腾过的东西，其实都是这种好奇心在作祟。比如在打比赛调车的时候，传统的终端输出看着让人抓狂，满屏跳动的数字毫无直观性可言。如果没有好奇心，可能我也就咬咬牙，随大流忍着继续用黑框框了。但那种“极客的玩心”会让我忍不住去想：既然现有的不好用，为什么我不自己动手搞一个类似 PulseScope 这样的可视化工具出来？把那些冷冰冰的参数变成直观的图表，不比死磕终端酷多了吗？&lt;/p&gt;
&lt;p&gt;对不同技术栈的探索也是一样。从写底层的 C++，到为了折腾自定义客户端去摸索 Rust 和 Bevy 引擎，再到用 Astro 框架一点点把现在这个博客搭起来，或者是用 Go 写个爬虫。如果单纯把编程当成一种任务，这些跨度极大的技术栈切换只会让人觉得心力交瘁、疲于奔命。但如果是出于对未知世界的热爱，去研究一门新语言的特性，去弄懂一个框架的底层逻辑，那么枯燥的查文档和解 Bug 的过程本身，就变成了一种享受。&lt;/p&gt;
&lt;p&gt;其实看了那么多大佬的经历后我发现，他们之所以能持续地产出高质量的作品，并不是因为他们有着常人难以企及的、用来对抗痛苦的钢铁意志，而是因为他们根本就乐在其中。这种对世界的好奇心，才是抵抗内耗和疲惫的最佳武器。&lt;/p&gt;
&lt;p&gt;当代码不再是机械劳动的产物，而是你用来探索、解构和重塑这个世界的触角时，事情的性质就完全变了。&lt;/p&gt;
&lt;h2 id=&quot;真正的深度是系统性地解决问题&quot;&gt;真正的深度是“系统性地解决问题”&lt;/h2&gt;
&lt;p&gt;但在用新时代的工具去延展这些触角时，我却经历了一次认知上的震荡。&lt;/p&gt;
&lt;p&gt;写到这里，我突然有一种心虚的感觉。因为前面提到的那些“创造”——觉得 htop 不直观于是用 Rust 写的 Linux 显卡监视器、为了方便队员看开源文章写的 Go 爬虫、为了告别痛苦的终端调车搞的可视化软件，甚至是我一直在迭代的这个博客…其实很大一部分代码，并不是我一行一行敲出来的。&lt;/p&gt;
&lt;p&gt;它们是我“Vibe”出来的。&lt;/p&gt;
&lt;p&gt;这也是为什么我总是会有“感觉我的思考好像没有深度了”的想法的原因。因为当你不再需要为了一个 C++ 的野指针报错，或者 Rust 的生命周期死磕一整个下午时，真的会产生一种“不劳而获”的错觉。vibecoding 剥夺了那种“受尽折磨后终于跑通”的虚假成就感，让人直接面对结果。这甚至让我产生了一种“冒名顶替综合征”——代码都不是我手敲的，我算什么大佬？我还是在创造吗？&lt;/p&gt;
&lt;p&gt;(PS: 发现没有，人有时候就是会陷入受苦的路径依赖，习惯了在泥泞中跋涉，突然被跑车送到了终点，反而怀疑方向错没错🤣)&lt;/p&gt;
&lt;p&gt;但顺着我自己总结的第一条感悟仔细往下想，我发现我可能陷入了思维误区。&lt;/p&gt;
&lt;p&gt;既然我得出的结论是“把代码当作处理事情的高优先级工具”，那我追求的难道不该是最高效地把工具造出来，去解决实际问题吗？&lt;/p&gt;
&lt;p&gt;以前，机械化劳动的本质是“翻译”——脑子想好逻辑，双手把逻辑翻译成特定语言的语法。而 vibecoding，其实就是把这种低级的“翻译工作”外包了。它不是在消解创造，而是在给杠杆“加杠杆”。&lt;/p&gt;
&lt;p&gt;AI 根本不知道我们打比赛需要关注什么开源文章，也不知道调车时盯着黑框框终端有多崩溃，更无法凭空捏造出一个 Linux 显卡监视器的架构。是我发现了痛点，定义了需求，挑选了合适的语言（Rust, Go, C++），然后“驾驭”着 AI 把解决方案落地。这就好比我从一个苦哈哈的“砖瓦匠”，变成了“架构师”兼“产品经理”。&lt;/p&gt;
&lt;p&gt;真正的深度，从来不在于能手撸多复杂的底层语法，而在于能否“系统性地解决问题”。只要那份对世界的好奇心还在，只要我知道自己在造什么，能敏锐地发现痛点并用工具去填平它，那 Vibe 出来的代码，照样是我在这个世界打下的烙印。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-02-19T16:14:00.000Z</dc:date><dcterms:modified>2026-03-15T13:52:27.000Z</dcterms:modified><category>随便写写</category><category>思考</category><category>coding</category><category>计算机</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/%E5%85%B3%E4%BA%8Ecoding%E7%9A%84%E4%B8%80%E4%BA%9B%E6%83%B3%E6%B3%95#comments</comments></item><item><title>2026 最新：国内环境低成本注册 Claude 账号防封教程</title><link>https://www.neomelt.cloud/posts/claude-sign-up-guide</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/claude-sign-up-guide</guid><description>记录下注册claude账号的过程</description><pubDate>Thu, 19 Feb 2026 07:51:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;引言&quot;&gt;引言&lt;/h2&gt;
&lt;p&gt;众所周知，Claude 对于国内的管控非常严格，比如 IDC IP 连坐、虚拟号秒拒、新号高危等等，之前总是觉得其他好像也能用，但是在尝试了 copilot 、anti-gravity 和 Qoder，但是实际上体验都很一般，copilot 体验最差，完全就像一个未开智的小登，一直给你堆屎山；qoder 次之，虽然还算便宜，但是搭配具体的使用便捷性和方式来说很不习惯，充了一个月 pro 用了三四天就再也没有用过了，最近在用 anti-gravity，免费但是很容易断连，不过模型还是不错的，写写前端和一些简单的后端我觉得是很不错的，而且 plan 模式我是很喜欢的，但是就是很不稳定吧。&lt;/p&gt;
&lt;p&gt;昨天晚上看到有群友(大佬)招人，一个要求是会用 Claude,我顿时很感慨，加上我今天早上在知乎看到一篇回答&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref=&quot;&quot; aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;：Redis之父也宣称 vibecoding 改变了他的生活方式,这篇回答里有句话说的很好：“朋友，我就一个建议。不管你觉得理想的世界应该是啥样，你都没法通过拒绝现实去改变它。死撑着不用 AI，对你的职业生涯一点好处都没有。动动脑子，认真试一下这些新工具。多花几周去沉浸式体验，别试个五分钟就忙着给自己原有的偏见找补。你要想办法让自己，一个人活成一支队伍。如果现在觉得不好用，过几个月再试试。你可能觉得，自己辛辛苦苦学了这么久编程，结果现在机器全代劳了。但你想想，当年你熬夜写代码，看着项目跑通时，你心里那团火到底是因为什么？是因为，创造。现在，如果你能玩转 AI，你能构建出更多，更牛的东西。那种乐趣，一点都没变。”&lt;/p&gt;
&lt;p&gt;看到这我瞬间觉得很感动：对啊，我的目的不就是做有趣的事情吗，而且我曾经也说过“好的工具能够显著的提高开发效率”，这样来看我之前对vibecoding的反感荡然无存，是啊，我们需要的是产品、是结果，而不是这个东西是怎么来的，没有人真正关心你的东西是怎么写出来的，你做出来了你就是牛，这就是你的产品，而且那种创造的感觉一点没有变。&lt;/p&gt;
&lt;h2 id=&quot;前置条件&quot;&gt;前置条件&lt;/h2&gt;
&lt;p&gt;干净的节点与环境隔离&lt;/p&gt;
&lt;h3 id=&quot;节点选择&quot;&gt;节点选择&lt;/h3&gt;
&lt;p&gt;别迷信原生 IP，关键看风控值。个人实测使用美国加州圣何塞的节点，通过 whoer.net 测试伪装度达到 90%（DNS 无泄漏）&lt;/p&gt;
&lt;h3 id=&quot;环境无菌室&quot;&gt;环境无菌室&lt;/h3&gt;
&lt;p&gt;绝对不要在日常使用的主力浏览器直接注册！&lt;/p&gt;
&lt;p&gt;在 Chrome 中新建一个无任何账号登录的独立 Profile（配置），这能确保你的本地 Cookie 和以前访问国内网站的复杂浏览器指纹不会污染新环境。（Edge应该也可以，不过我想很多技术er应该都会喜欢chrome的简约）&lt;/p&gt;
&lt;p&gt;将 claude.ai 保存为本地 PWA 应用，彻底隔绝本地 Cookie 和复杂指纹污染。之后访问 claude.ai 也尽量走这个新的 profile，避免被封号。&lt;/p&gt;
&lt;h2 id=&quot;接码&quot;&gt;接码&lt;/h2&gt;
&lt;p&gt;登录最好使用注册时间较长的gmail账号，以谷歌账号的形式登录应该会更加安全。&lt;/p&gt;
&lt;p&gt;然后就是需要手机号验证了，这是最大的难点了。&lt;/p&gt;
&lt;h3 id=&quot;接码平台推荐&quot;&gt;接码平台推荐&lt;/h3&gt;
&lt;p&gt;避开已失效的老平台（如 sms-activate）和各种 GV 虚拟号。实测使用 hero-sms （博主两次就成功了）或 PingMe。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;核心法则——“归属地一致”： 节点是美国 IP，就必须买美国的实体手机号。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;收到后尽量手动键盘输入，不要复制粘贴(虽然我是直接cv的没啥事，但是还是尽量谨慎一点好)&lt;/p&gt;
&lt;h2 id=&quot;给路由加层规则&quot;&gt;给路由加层规则&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;(注：本文以经典版 Clash Verge 为例，使用 Rev 版本或其他客户端的用户，核心思路都是通过 Merge 或 Rule Providers 将 claude.ai 和 anthropic.com 的流量固定为同一节点)”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;找到自己的代理软件的 profiles 界面，找到下面这个方框&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/claude-sign-up-guide/1.png&quot; alt=&quot;Clash Verge 的 Profiles 页面：右键 Global Extend Config 卡片弹出 Edit File 菜单&quot;&gt;&lt;/p&gt;
&lt;p&gt;然后右键edit进入代码界面,将自己的节点名称写进去（一个字也不能错）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.neomelt.cloud/blog/claude-sign-up-guide/2.png&quot; alt=&quot;Global Extend Config 编辑框：用 prepend-rules 把 claude.ai 和 anthropic.com 固定到同一节点&quot;&gt;&lt;/p&gt;
&lt;p&gt;设置完之后save然后重启内核即可生效，但是一定要记得将代理模式切为rule，不然如果走的是global的话一旦切换了节点，你Claude的ip也会跳，会引发很大的封号危机。&lt;/p&gt;
&lt;h2 id=&quot;注意事项&quot;&gt;注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;尽量用新的、干净的profile来登录 claude.ai，防止被复杂的cookies环境干扰导致封号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;尽量不要随意切换ip登录 claude.ai，最少也要隔6小时。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-footnotes=&quot;&quot; class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zhihu.com/question/1995213825918641040/answer/1999195986283749895&quot;&gt;Redis 之父称「手写代码不再必要」，你如何看待 AI 对编程的影响？&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-02-19T07:51:00.000Z</dc:date><dcterms:modified>2026-07-25T12:57:28.000Z</dcterms:modified><category>ai</category><category>vibecoding</category><category>claude</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/claude-sign-up-guide#comments</comments></item><item><title>Ubuntu系统雾凇输入法配置</title><link>https://www.neomelt.cloud/posts/ubuntu-input-setting</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/ubuntu-input-setting</guid><description>记录下Ubuntu配置雾凇输入法的过程</description><pubDate>Wed, 18 Feb 2026 14:01:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;前言&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;Linux 下的中文输入法一直是个痛点。默认的 IBus 常常“不够聪明”，而 Rime（中州韵）虽然强大，但默认配置过于简陋，劝退了不少人。&lt;/p&gt;
&lt;p&gt;我由于最近买了新电脑，没有配置雾凇所以就一直捏着鼻子使用默认的输入法，但是今天晚上写随笔的时候实在是忍无可忍了，垃圾的词库导致我将很多时间都浪费在找候选词上，所以折腾了一会就换成了一套颜值在线、词库强大、极客感十足的终极方案：Fcitx5 框架 + 雾淞拼音 (Rime-Ice)。&lt;/p&gt;
&lt;p&gt;这套方案的优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fcitx5：轻量、现代，对 Wayland 支持更好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;雾淞拼音：长期维护的简体词库，开箱即用，自带日期、拆字、Emoji 等功能。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;完全离线：隐私安全，没有广告。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;第一步卸载旧爱安装新欢&quot;&gt;第一步：卸载旧爱，安装新欢&lt;/h2&gt;
&lt;p&gt;Ubuntu/Debian 默认通常是 IBus，我们需要先安装 Fcitx5 及其 Rime 引擎。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：一定要安装 librime-plugin-lua，否则雾淞拼音的“日期/时间”等高级功能无法使用。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fcitx5&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fcitx5-rime&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; librime-plugin-lua&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fcitx5-config-qt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完成后，通过 im-config 切换输入法框架：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;im-config&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -n&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fcitx5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ 踩坑点 1：执行完这一步必须重启电脑（或注销），否则系统还在运行 IBus，Fcitx5 无法接管键盘。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;第二步部署雾淞拼音-rime-ice&quot;&gt;第二步：部署雾淞拼音 (Rime-Ice)&lt;/h2&gt;
&lt;p&gt;Rime 的灵魂在于“配置方案”。我们要把默认的“朙月拼音”换成“雾淞拼音”。&lt;/p&gt;
&lt;p&gt;推荐使用 git 部署，这样以后更新词库只需要 git pull，非常方便。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 1. 创建 Fcitx5 的 Rime 目录（如果没有）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.local/share/fcitx5/rime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2. 进入目录&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.local/share/fcitx5/rime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 3. 克隆仓库（--depth 1 减少下载体积）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --depth&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://github.com/iDvel/rime-ice.git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;第三步关键配置-shift-切换--激活方案&quot;&gt;第三步：关键配置 (Shift 切换 &amp;#x26; 激活方案)&lt;/h2&gt;
&lt;p&gt;这一步是为了符合 Windows/Mac 的使用习惯：按 Shift 键切换中/英文。&lt;/p&gt;
&lt;p&gt;在 ~/.local/share/fcitx5/rime 目录下新建（或编辑）default.custom.yaml&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.local/share/fcitx5/rime/default.custom.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;## 如果没有这个文件需要自行创建&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;patch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # 1. 只有这一行，Rime 才会真正使用雾淞拼音&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  schema_list&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;schema&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rime_ice&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # 2. 覆盖快捷键设置&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  &quot;ascii_composer/switch_key&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    Shift_L&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;commit_code&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # 左 Shift：上屏并切换中英&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    Shift_R&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;noop&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # 右 Shift：无操作（防止误触）&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    Control_L&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;noop&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # 屏蔽 Ctrl 切换，避免与系统快捷键冲突&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    Control_R&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;noop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;第四步告别黑白框-美化&quot;&gt;第四步：告别“黑白框” (美化)&lt;/h2&gt;
&lt;p&gt;默认的 Fcitx5 皮肤非常原始（只有黑白文字）。我们可以安装 Material 风格的主题。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; apt&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fcitx5-material-color&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装后，打开 Fcitx 5 配置 (Fcitx5 Configuration)：&lt;/p&gt;
&lt;p&gt;进入 配置附加组件 (Addons)。&lt;/p&gt;
&lt;p&gt;找到 经典用户界面 (Classic UI) -&gt; 点击配置。&lt;/p&gt;
&lt;p&gt;主题 (Theme) 选择 Material-Color-Teal 或 Material-Color-Blue。&lt;/p&gt;
&lt;p&gt;建议把 字体 (Font) 调大一点（例如 14 或 16）。&lt;/p&gt;
&lt;h2 id=&quot;第五步踩坑记录-无法开机自启&quot;&gt;第五步：踩坑记录 (无法开机自启)&lt;/h2&gt;
&lt;p&gt;这是我在 Ubuntu (Gnome) 上遇到的最大问题：重启后 Fcitx5 不会自动运行，按快捷键也没反应。&lt;/p&gt;
&lt;p&gt;解决方法：强制添加开机自启。&lt;/p&gt;
&lt;p&gt;打开终端，直接写入一个自启文件：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -p&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.config/autostart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;EOF&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ~/.config/autostart/fcitx5.desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;[Desktop Entry]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Type=Application&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Exec=/usr/bin/fcitx5 -d&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hidden=false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;NoDisplay=false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;X-GNOME-Autostart-enabled=true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Name=Fcitx5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Comment=Start Fcitx5 Input Method&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;踩坑点 2：命令里的 -d 参数很重要，它代表后台守护进程运行。如果不加，可能启动失败。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;常用技巧速查&quot;&gt;常用技巧速查&lt;/h2&gt;
&lt;p&gt;部署完后，体验简直起飞。这里记录几个开发者常用的功能：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;快速输入日期/时间（写 Log 神器）：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;输入 rq -&gt; 2026-02-18&lt;/p&gt;
&lt;p&gt;输入 sj -&gt; 21:30:00&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;特殊符号：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;输入 v 然后按 1~9，可以快速找箭头、数学符号、序号等。&lt;/p&gt;
&lt;p&gt;或者用 / 开头，例如 /xl (希腊字母)。&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;拆字模式（遇到不认识的字）：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;按 u + U 进入拆字。例如输入 uu + huo huo huo -&gt; 焱。&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Emoji：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;直接输拼音：haha -&gt; 😂，xixi -&gt; 🦏。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：雾凇输入发在ubuntu22.04会出现因依赖库版本过低无法兼容的情况，表现为切换到中文输入法的时候无法呼出选词框，&lt;a href=&quot;https://my.feishu.cn/wiki/S2fAwMir0ijrD0kfiRocm3snn6f?from=from_copylink&quot;&gt;解决办法&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2026-02-18T14:01:00.000Z</dc:date><dcterms:modified>2026-05-01T17:49:48.000Z</dcterms:modified><category>输入法</category><category>Ubuntu</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/ubuntu-input-setting#comments</comments></item><item><title>Rust入门指南</title><link>https://www.neomelt.cloud/posts/rust-guide</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/rust-guide</guid><description>从所有权到错误处理，系统梳理 Rust 核心概念</description><pubDate>Sat, 16 Aug 2025 13:40:00 GMT</pubDate><content:encoded>&lt;p&gt;用了一段时间 Rust 之后，想把核心概念整理一遍。这篇文章不是语法手册，而是帮你建立对 Rust 的直觉——尤其是所有权这套东西，理解了它，Rust 就通了一大半。&lt;/p&gt;
&lt;h2 id=&quot;为什么是-rust&quot;&gt;为什么是 Rust？&lt;/h2&gt;
&lt;p&gt;Rust 解决的核心问题是：&lt;strong&gt;在没有垃圾回收的情况下保证内存安全&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;C/C++ 让你手动管理内存，性能极高，但悬空指针、double free、数据竞争这些问题防不胜防。GC 语言（Go、Java、Python）解决了安全问题，但运行时开销和 GC 停顿是绕不开的代价。&lt;/p&gt;
&lt;p&gt;Rust 的答案是把内存管理的规则编译进类型系统，让编译器在编译期替你检查，运行时零开销。代价是学习曲线陡。&lt;/p&gt;
&lt;h2 id=&quot;所有权rust-的核心&quot;&gt;所有权：Rust 的核心&lt;/h2&gt;
&lt;p&gt;Rust 里每个值有且只有一个&lt;strong&gt;所有者&lt;/strong&gt;（owner）。所有者离开作用域，值就被释放。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// s 是这个字符串的所有者&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // 使用 s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// s 离开作用域，字符串内存被释放&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;所有权转移（Move）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;把值赋给另一个变量，所有权转移，原变量失效：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s2 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s1;           &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 所有权转移给 s2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// println!(&quot;{}&quot;, s1); // 编译错误：s1 已经无效&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, s2);    &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 正常&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这就是 Rust 防止 double free 的方式——同一块内存永远只有一个所有者。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Clone：显式深拷贝&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果确实需要两份数据，用 &lt;code&gt;.clone()&lt;/code&gt;：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s2 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 深拷贝，两者独立&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{} {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, s1, s2); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 都有效&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Copy 类型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;整数、浮点数、布尔、字符这些存在栈上的类型实现了 &lt;code&gt;Copy&lt;/code&gt; trait，赋值时自动复制，不会转移所有权：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; x;               &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 复制，不是移动&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{} {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, x, y); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 都有效&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;借用临时使用不拿走&quot;&gt;借用：临时使用，不拿走&lt;/h2&gt;
&lt;p&gt;大多数时候你不想转移所有权，只是想用一下。用引用（&lt;code&gt;&amp;#x26;&lt;/code&gt;）来借用：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; print_len&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(s&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;长度: {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, s&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;print_len&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;s);     &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 借用给函数，s 的所有权没有转移&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, s); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// s 仍然有效&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;可变借用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认借用是只读的。要修改，需要可变借用 &lt;code&gt;&amp;#x26;mut&lt;/code&gt;：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; add_world&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(s&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;mut&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    s&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push_str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;, world&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;add_world&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, s); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// &quot;hello, world&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;借用规则&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rust 在编译期强制执行两条规则：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;同一时刻，要么只有一个可变借用，要么有任意多个不可变借用&lt;/li&gt;
&lt;li&gt;引用必须始终有效（不能有悬空引用）&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; r1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;s;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; r2 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;s;      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 多个不可变借用，没问题&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// let r3 = &amp;#x26;mut s; // 编译错误：不能同时存在可变和不可变借用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{} {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, r1, r2);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// r1, r2 最后使用完毕，之后可以创建可变借用&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; r3 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; s;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;r3&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;!&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这套规则在编译期消灭了数据竞争。&lt;/p&gt;
&lt;h2 id=&quot;枚举和模式匹配&quot;&gt;枚举和模式匹配&lt;/h2&gt;
&lt;p&gt;Rust 的枚举比其他语言强大得多，每个变体可以携带不同类型的数据：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;enum&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Shape&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Circle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Rectangle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Triangle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { base&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, height&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; area&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(shape&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Shape&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    match&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; shape {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        Shape&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Circle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(r)                    &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;consts&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;PI&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; r &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; r,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        Shape&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Rectangle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(w, h)              &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; w &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; h,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        Shape&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Triangle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { base, height }    &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; base &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; height,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;match&lt;/code&gt; 必须穷举所有变体，漏掉一个编译不过——这个特性在你添加新枚举变体时会提醒你更新所有相关处理逻辑，非常实用。&lt;/p&gt;
&lt;h2 id=&quot;错误处理option-和-result&quot;&gt;错误处理：Option 和 Result&lt;/h2&gt;
&lt;p&gt;Rust 没有 null，没有异常，用类型来表达”可能缺失”和”可能失败”。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option：值可能不存在&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; find_first_even&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(nums&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;i32&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Option&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;i32&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;n &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; n &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(n);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; find_first_even&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(n) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;找到了: {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, n),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    None&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    =&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;没有偶数&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Result：操作可能出错&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;fs;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; read_config&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(path&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Result&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    fs&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;read_to_string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; read_config&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;config.toml&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Ok&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(content) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, content),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Err&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(e)      &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; eprintln!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;读取失败: {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, e),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;?&lt;/code&gt; 运算符：错误传播的语法糖&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在返回 &lt;code&gt;Result&lt;/code&gt; 的函数内，&lt;code&gt;?&lt;/code&gt; 会在出错时提前返回错误：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; process&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Result&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;(), std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; content &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fs&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;read_to_string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;a.txt&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// 出错则直接返回 Err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; more    &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fs&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;read_to_string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;b.txt&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{}{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, content, more);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Ok&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;相比手动 &lt;code&gt;match&lt;/code&gt; 每个结果，&lt;code&gt;?&lt;/code&gt; 让错误处理代码简洁很多。&lt;/p&gt;
&lt;h2 id=&quot;trait定义共同行为&quot;&gt;Trait：定义共同行为&lt;/h2&gt;
&lt;p&gt;Trait 类似其他语言的接口，定义类型必须实现的方法：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;trait&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Describe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; describe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Dog&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Cat&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Describe&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Dog&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; describe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        format!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{} 是一只狗&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;name)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;impl&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Describe&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; for&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Cat&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; describe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        format!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{} 是一只猫&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;name)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; print_info&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(animal&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;impl&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Describe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, animal&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;describe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;标准库里有很多常用 trait，比如 &lt;code&gt;Display&lt;/code&gt;（格式化输出）、&lt;code&gt;Iterator&lt;/code&gt;、&lt;code&gt;From&lt;/code&gt;/&lt;code&gt;Into&lt;/code&gt;，实现它们就能融入 Rust 生态。&lt;/p&gt;
&lt;h2 id=&quot;接下来&quot;&gt;接下来&lt;/h2&gt;
&lt;p&gt;理解了所有权和借用，你对 Rust 的基础心智模型就建立起来了。建议的学习路径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://doc.rust-lang.org/book/&quot;&gt;The Book&lt;/a&gt;&lt;/strong&gt; — 官方教程，质量极高，适合系统学习&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rustlings&lt;/strong&gt; — 通过修复小练习来熟悉语法，适合动手党&lt;/li&gt;
&lt;li&gt;找个实际项目练手，哪怕是写个命令行小工具，遇到编译器报错再查文档，进步最快&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rust 的学习曲线主要在前期跟编译器”吵架”，但过了那个阶段你会发现，编译器拦下来的那些错误，在其他语言里都是运行时 bug。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2025-08-16T13:40:00.000Z</dc:date><dcterms:modified>2026-03-15T13:52:27.000Z</dcterms:modified><category>coding</category><category>Rust</category><category>study</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/rust-guide#comments</comments></item><item><title>为什么我重新搭了一个博客</title><link>https://www.neomelt.cloud/posts/my-first-tech-blog</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/my-first-tech-blog</guid><description>关于写博客这件事，以及我在学什么</description><pubDate>Thu, 14 Aug 2025 02:21:00 GMT</pubDate><content:encoded>&lt;p&gt;这不是我第一次搭博客，但应该是认真想用起来的一次。&lt;/p&gt;
&lt;p&gt;之前也折腾过，Hexo、Hugo，搭完放着吃灰，过几个月看到别人的博客又手痒，重新搭，然后继续吃灰。这次换了 Astro，强迫症发作在框架上花了不少时间——但这不是重点，重点是我想搞清楚自己为什么总在搭博客却不在写博客。&lt;/p&gt;
&lt;h2 id=&quot;写博客是为了什么&quot;&gt;写博客是为了什么&lt;/h2&gt;
&lt;p&gt;学了快两年了，我越来越觉得自己有一个问题：&lt;strong&gt;动手能力尚可，但理论基础很薄&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;能跑起来 ROS2 的导航栈，能用 Rust 写点东西，能把 SLAM 的流程大概跑通，但如果有人问我”卡尔曼滤波为什么这么设计”，或者”Rust 所有权的本质是什么”，我很可能答不上来，或者答得很模糊。&lt;/p&gt;
&lt;p&gt;这个感觉越来越让我不舒服。工程上能 run 起来，但对底层原理说不清楚，感觉像踩在沙子上——能站着，但不稳。&lt;/p&gt;
&lt;p&gt;写博客是我给自己的一个要求：&lt;strong&gt;写得出来才算真的懂&lt;/strong&gt;。费曼说的那个方法，用自己的话解释清楚一件事，比反复看书有效得多。这个博客就是我的”解释给自己听”的地方。&lt;/p&gt;
&lt;h2 id=&quot;我在学什么&quot;&gt;我在学什么&lt;/h2&gt;
&lt;p&gt;目前主要在几个方向折腾：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;机器人相关&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ROS2 是主要工具，最近在啃导航栈——Nav2 的行为树、代价地图、局部规划器那一套。CV 方向做过一些目标检测的活，去年搞过 SLAM，用的是 PointLIO 和 slam_toolbox，但对里面的数学还不够扎实，是接下来要补的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;系统编程&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rust、C++、Go 都在用，语言只是工具，哪个合适用哪个。Rust 在机器人项目里写过一些工具和库，C++ 是 ROS 生态绕不开的，Go 偶尔写写后端服务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI/深度学习&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这块还在入门，从基础的神经网络开始补。最近在玩 Agent，用 OpenClaw 之类的框架搭了一些东西，感觉很有意思，目标是能读懂论文、理解方法设计的动机，而不只是会调包。&lt;/p&gt;
&lt;h2 id=&quot;接下来&quot;&gt;接下来&lt;/h2&gt;
&lt;p&gt;这个博客大概会记录：学到的东西、踩过的坑、对某个问题的理解。不一定高深，但要真实——我不会写自己没搞懂的东西假装懂了。&lt;/p&gt;
&lt;p&gt;先把基础补扎实。慢慢来。&lt;/p&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2025-08-14T02:21:00.000Z</dc:date><dcterms:modified>2026-03-15T13:52:27.000Z</dcterms:modified><category>随便写写</category><category>随想</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/my-first-tech-blog#comments</comments></item><item><title>git命令速查</title><link>https://www.neomelt.cloud/posts/quick-git-command-lookup</link><guid isPermaLink="true">https://www.neomelt.cloud/posts/quick-git-command-lookup</guid><description>速查</description><pubDate>Fri, 31 Jan 2025 01:28:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;main-porcelain-commands主要高层指令&quot;&gt;Main Porcelain Commands（主要高层指令）&lt;/h2&gt;
&lt;h3 id=&quot;1-git-add&quot;&gt;1. &lt;code&gt;git add&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;fil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：将文件内容添加到索引（暂存区）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                             | 说明                                                      |
| -------------------------------- | --------------------------------------------------------- | -------------------------------- |
| &lt;code&gt;-n, --dry-run&lt;/code&gt;                  | 不实际添加文件，只显示哪些文件将被添加。                  |
| &lt;code&gt;-v, --verbose&lt;/code&gt;                  | 详细模式，显示每个添加文件的状态。                        |
| &lt;code&gt;-f, --force&lt;/code&gt;                    | 允许添加被 .gitignore 忽略的文件。                        |
| &lt;code&gt;-i, --interactive&lt;/code&gt;              | 交互式添加，进入交互界面选择要暂存的内容。                |
| &lt;code&gt;-p, --patch&lt;/code&gt;                    | 交互式选择补丁（hunks），允许只暂存一个文件中的部分改动。 |
| &lt;code&gt;-e, --edit&lt;/code&gt;                     | 在编辑器中打开差异，允许手动编辑暂存内容。                |
| &lt;code&gt;-u, --update&lt;/code&gt;                   | 更新已追踪文件的索引，不处理新文件。                      |
| &lt;code&gt;-A, --all, --no-ignore-removal&lt;/code&gt; | 暂存所有改动（新增、修改、删除）。                        |
| &lt;code&gt;--no-all, --ignore-removal&lt;/code&gt;     | 暂存新增和修改，但不暂存删除。                            |
| &lt;code&gt;-N, --intent-to-add&lt;/code&gt;            | 记下路径，稍后再添加内容（对 git diff 可见但未暂存）。    |
| &lt;code&gt;--refresh&lt;/code&gt;                      | 不添加文件，只刷新索引中的统计信息。                      |
| &lt;code&gt;--ignore-errors&lt;/code&gt;                | 如果某些文件因为错误无法添加，继续添加其他文件。          |
| &lt;code&gt;--ignore-missing&lt;/code&gt;               | 与 —refresh 配合使用，忽略丢失的文件。                   |
| &lt;code&gt;--no-warn-embedded-repo&lt;/code&gt;        | 不警告嵌入式仓库。                                        |
| &lt;code&gt;--renormalize&lt;/code&gt;                  | 对所有追踪文件应用“清洁”过滤。                            |
| &lt;code&gt;--chmod=(+                      | -)x&lt;/code&gt;                                                      | 强制修改被添加文件的可执行权限。 |
| &lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt;&lt;/code&gt;    | 从文件中读取路径规范。                                    |
| &lt;code&gt;--pathspec-file-nul&lt;/code&gt;            | 配合上一个参数，路径规范由 NUL 字符分隔。                 |
| &lt;code&gt;--&lt;/code&gt;                             | 分隔选项和路径规范，防止文件名与选项冲突。                |&lt;/p&gt;
&lt;h3 id=&quot;2-git-bisect&quot;&gt;2. &lt;code&gt;git bisect&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bisect&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bisect&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bad&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bisect&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; good&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;commi&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：使用二分查找定位引入 Bug 的提交&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                             | 说明                                  |
| ------------------------------------------------ | ------------------------------------- | ------------------------------------ |
| &lt;code&gt;start [&amp;#x3C;bad&gt; [&amp;#x3C;good&gt;...]] [--] [&amp;#x3C;pathspec&gt;...]&lt;/code&gt; | 启动二分查找。                        |
| &lt;code&gt;bad [&amp;#x3C;rev&gt;]&lt;/code&gt;                                    | 标记当前（或指定）版本为“坏”。        |
| &lt;code&gt;good [&amp;#x3C;rev&gt;...]&lt;/code&gt;                                | 标记一个或多个版本为“好”。            |
| &lt;code&gt;new [&amp;#x3C;rev&gt;] / old [&amp;#x3C;rev&gt;]&lt;/code&gt;                      | 用于非 Bug 类（如性能）的查找替代词。 |
| &lt;code&gt;terms [--term-good &amp;#x3C;term&gt; --term-bad &amp;#x3C;term&gt;]&lt;/code&gt;   | 设置查找的术语。                      |
| &lt;code&gt;skip [(&amp;#x3C;rev&gt;                                    | &amp;#x3C;range&gt;)...]&lt;/code&gt;                         | 跳过指定的提交（如该提交无法编译）。 |
| &lt;code&gt;reset [&amp;#x3C;commit&gt;]&lt;/code&gt;                               | 退出二分查找并回到指定分支。          |
| &lt;code&gt;visualize / view&lt;/code&gt;                               | 查看当前查找范围。                    |
| &lt;code&gt;replay &amp;#x3C;logfile&gt;&lt;/code&gt;                               | 从日志文件重放查找过程。              |
| &lt;code&gt;log&lt;/code&gt;                                            | 显示当前的查找日志。                  |
| &lt;code&gt;run &amp;#x3C;cmd&gt; &amp;#x3C;args&gt;...&lt;/code&gt;                            | 通过运行脚本自动进行二分查找。        |&lt;/p&gt;
&lt;h3 id=&quot;3-git-branch&quot;&gt;3. &lt;code&gt;git branch&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branch-nam&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; branch&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -d&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branch-nam&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：列出、创建或删除分支&lt;/p&gt;
&lt;/blockquote&gt;













































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-a, --all&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示本地和远程所有分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-r, --remotes&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只显示远程追踪分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --verbose&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示每个分支的最后一次提交 ID 和注释。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-vv&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示与远程分支的追踪关系和领先/落后数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--show-current&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只打印当前分支名称。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制创建或重命名分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m, --move&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重命名分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-M&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制重命名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-c, --copy&lt;/code&gt;&lt;/td&gt;&lt;td&gt;拷贝分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-C&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制拷贝。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-d, --delete&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除已合并的分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-D&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制删除分支（无论是否合并）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l, --list&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示分支列表（默认）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--create-reflog&lt;/code&gt;&lt;/td&gt;&lt;td&gt;为新分支创建 reflog。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--edit-description&lt;/code&gt;&lt;/td&gt;&lt;td&gt;打开编辑器编辑分支描述。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--set-upstream-to=&amp;#x3C;remote/branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置本地分支追踪远程分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--unset-upstream&lt;/code&gt;&lt;/td&gt;&lt;td&gt;移除上游追踪关系。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--contains [&amp;#x3C;commit&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出包含特定提交的分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-contains [&amp;#x3C;commit&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出不包含特定提交的分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--merged [&amp;#x3C;commit&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出已合并到当前分支的分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-merged [&amp;#x3C;commit&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出尚未合并的分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--sort=&amp;#x3C;key&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;按特定字段（如 authordate）排序。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--points-at &amp;#x3C;object&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出指向特定对象的分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--format &amp;#x3C;format&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自定义输出格式。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;4-git-checkout&quot;&gt;4. &lt;code&gt;git checkout&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; checkout&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;new-branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：切换分支或恢复工作树文件&lt;/p&gt;
&lt;/blockquote&gt;





















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式，不显示反馈。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]progress&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制显示进度。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-b &amp;#x3C;new_branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建并切换到新分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-B &amp;#x3C;new_branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建（或重置）并切换到新分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l&lt;/code&gt;&lt;/td&gt;&lt;td&gt;为新分支创建 reflog。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-d, --detach&lt;/code&gt;&lt;/td&gt;&lt;td&gt;切换到指向某个提交的状态（分离头指针状态）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-t, --track&lt;/code&gt;&lt;/td&gt;&lt;td&gt;为新分支设置上游（upstream）追踪。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--guess / --no-guess&lt;/code&gt;&lt;/td&gt;&lt;td&gt;如果分支名不存在，尝试从远程库匹配。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--orphan &amp;#x3C;new_branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建一个没有任何历史的新分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-2, --ours&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在冲突合并中检出“我们的”版本。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-3, --theirs&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在冲突合并中检出“他们的”版本。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m, --merge&lt;/code&gt;&lt;/td&gt;&lt;td&gt;切换分支时，尝试合并当前未保存的修改。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--conflict=&amp;#x3C;style&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定冲突显示样式（merge 或 diff3）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-p, --patch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;交互式选择部分代码块进行恢复。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--overlay / --no-overlay&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定是否允许检出时删除工作区的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;从文件中读取路径规范。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--pathspec-file-nul&lt;/code&gt;&lt;/td&gt;&lt;td&gt;路径规范由 NUL 字符分隔。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ignore-other-worktrees&lt;/code&gt;&lt;/td&gt;&lt;td&gt;忽略该分支是否在其他工作树中已被检出。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--recurse-submodules / --no-recurse-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;递归更新子模块。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;5-git-cherry-pick&quot;&gt;5. &lt;code&gt;git cherry-pick&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; cherry-pick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;commi&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：将现有提交引入的更改应用到当前分支&lt;/p&gt;
&lt;/blockquote&gt;

























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;commit&gt;...&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定要拣选的提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-e, --edit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;拣选后允许在编辑器中修改提交信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--cleanup=&amp;#x3C;mode&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置提交信息的清理方式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-x&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在提交信息末尾追加“cherry picked from commit …”的说明。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(已废弃) 过去用于 -x 的参数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m, --mainline &amp;#x3C;parent-number&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;拣选合并提交时，指定父分支编号。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --no-commit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只应用更改到工作区和暂存区，不自动生成提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s, --signoff&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在提交信息中添加 Signed-off-by 标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-S[&amp;#x3C;keyid&gt;], --gpg-sign[=&amp;#x3C;keyid&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;进行 GPG 签名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ff&lt;/code&gt;&lt;/td&gt;&lt;td&gt;如果当前 HEAD 是拣选提交的父级，则执行快进。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--allow-empty&lt;/code&gt;&lt;/td&gt;&lt;td&gt;允许拣选空提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--allow-empty-message&lt;/code&gt;&lt;/td&gt;&lt;td&gt;允许空提交信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--keep-redundant-commits&lt;/code&gt;&lt;/td&gt;&lt;td&gt;保留那些不产生改动的提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--strategy=&amp;#x3C;strategy&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;选择合并策略（如 recursive, resolve）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-X, --strategy-option=&amp;#x3C;option&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;向合并策略传递特定选项。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--rerere-autoupdate / --no-rerere-autoupdate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;如果可能，自动更新冲突解决记录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--abort&lt;/code&gt;&lt;/td&gt;&lt;td&gt;取消拣选过程。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--continue&lt;/code&gt;&lt;/td&gt;&lt;td&gt;解决冲突后继续。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--skip&lt;/code&gt;&lt;/td&gt;&lt;td&gt;跳过当前提交，继续拣选序列中的下一个。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--quit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;退出当前拣选，保留当前状态但不继续。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;6-git-clean&quot;&gt;6. &lt;code&gt;git clean&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clean&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：从工作树中删除未追踪的文件&lt;/p&gt;
&lt;/blockquote&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-d&lt;/code&gt;&lt;/td&gt;&lt;td&gt;除了删除文件外，同时删除未追踪的目录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制执行（Git 配置通常要求此项，防止误删）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-i, --interactive&lt;/code&gt;&lt;/td&gt;&lt;td&gt;交互式确认每一个删除操作。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --dry-run&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示哪些文件将被删除，但不实际执行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-e &amp;#x3C;pattern&gt;, --exclude=&amp;#x3C;pattern&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;排除匹配模式的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-x&lt;/code&gt;&lt;/td&gt;&lt;td&gt;同时删除被 .gitignore 忽略的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-X&lt;/code&gt;&lt;/td&gt;&lt;td&gt;仅删除被忽略的文件，不删除未追踪但未忽略的文件。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;7-git-clone&quot;&gt;7. &lt;code&gt;git clone&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;repositor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [directory]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：将存储库克隆到新目录&lt;/p&gt;
&lt;/blockquote&gt;





























































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l, --local&lt;/code&gt;&lt;/td&gt;&lt;td&gt;克隆本地路径时，尽可能使用硬链接。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-hardlinks&lt;/code&gt;&lt;/td&gt;&lt;td&gt;克隆本地路径时强制复制，不使用硬链接。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s, --shared&lt;/code&gt;&lt;/td&gt;&lt;td&gt;克隆本地路径时，不复制对象，而是设置共享（危险：删除原库会破坏此库）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--reference [-if-able] &amp;#x3C;repository&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用本地已有仓库作为参考以加速克隆。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--dissociate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;配合 —reference 使用，下载完后切断参考关系。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不显示进度报告。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --verbose&lt;/code&gt;&lt;/td&gt;&lt;td&gt;详细模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--progress&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示进度报告。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--server-option=&amp;#x3C;option&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;向远程服务器发送特定协议选项。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --no-checkout&lt;/code&gt;&lt;/td&gt;&lt;td&gt;克隆后不执行检出操作，只下载对象数据库。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--bare&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建一个裸仓库（不带工作目录）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--mirror&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建镜像仓库（包含所有引用，且设置为远程镜像）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-o &amp;#x3C;name&gt;, --origin &amp;#x3C;name&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定远程仓库的名称，默认为 origin。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-b &amp;#x3C;name&gt;, --branch &amp;#x3C;name&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;克隆后自动切换到指定分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-u &amp;#x3C;upload-pack&gt;, --upload-pack &amp;#x3C;upload-pack&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定远程使用的 git-upload-pack 路径。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--template=&amp;#x3C;directory&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定模板目录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-c &amp;#x3C;key&gt;=&amp;#x3C;value&gt;, --config &amp;#x3C;key&gt;=&amp;#x3C;value&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在克隆出的新库中设置配置。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--depth &amp;#x3C;depth&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;浅克隆。只下载最近的指定次数提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--shallow-since=&amp;#x3C;date&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;下载指定日期后的提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--shallow-exclude=&amp;#x3C;revision&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;排除特定版本后的所有历史。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]single-branch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只克隆一个分支（默认克隆所有分支）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-tags&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不下载远程标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--recurse-submodules[=&amp;#x3C;pathspec&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;递归初始化并克隆所有子模块。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]shallow-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;对子模块也执行浅克隆。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]remote-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;子模块使用远程追踪分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-j &amp;#x3C;n&gt;, --jobs &amp;#x3C;n&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;并行克隆子模块的数量。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--sparse&lt;/code&gt;&lt;/td&gt;&lt;td&gt;初始化稀疏检出。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--filter=&amp;#x3C;filter-spec&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用部分克隆（Partial Clone）过滤对象。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--bundle-uri=&amp;#x3C;uri&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;从指定的 URI 获取 bundle 加速初始化。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;8-git-commit&quot;&gt;8. &lt;code&gt;git commit&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;message&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --amend&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：记录对存储库的更改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                        | 说明                                                           |
| ------------------------------------------- | -------------------------------------------------------------- | -------------------------------- |
| &lt;code&gt;-a, --all&lt;/code&gt;                                 | 自动暂存所有修改和删除的文件（不包括新文件）。                 |
| &lt;code&gt;-p, --patch&lt;/code&gt;                               | 交互式选择部分代码块进行提交。                                 |
| &lt;code&gt;-C &amp;#x3C;commit&gt;, --reuse-message=&amp;#x3C;commit&gt;&lt;/code&gt;     | 重用指定提交的信息。                                           |
| &lt;code&gt;-c &amp;#x3C;commit&gt;, --reedit-message=&amp;#x3C;commit&gt;&lt;/code&gt;    | 重用并编辑指定提交的信息。                                     |
| &lt;code&gt;--fixup=[(amend                            | reword):]&amp;#x3C;commit&gt;&lt;/code&gt;                                             | 创建用于 autosquash 的修复提交。 |
| &lt;code&gt;--squash=&amp;#x3C;commit&gt;&lt;/code&gt;                         | 创建用于 autosquash 的合并提交。                               |
| &lt;code&gt;--reset-author&lt;/code&gt;                            | 将作者更新为当前用户。                                         |
| &lt;code&gt;--short / --branch / --porcelain / --long&lt;/code&gt; | 不同的输出状态格式。                                           |
| &lt;code&gt;-z, --null&lt;/code&gt;                                | 状态输出使用 NUL 分隔符。                                      |
| &lt;code&gt;-F &amp;#x3C;file&gt;, --file=&amp;#x3C;file&gt;&lt;/code&gt;                  | 从文件中读取提交信息。                                         |
| &lt;code&gt;--author=&amp;#x3C;author&gt;&lt;/code&gt;                         | 手动指定作者（“Name &lt;email&gt;” 格式）。                          |
| &lt;code&gt;--date=&amp;#x3C;date&gt;&lt;/code&gt;                             | 手动指定提交日期。                                             |
| &lt;code&gt;-m &amp;#x3C;msg&gt;, --message=&amp;#x3C;msg&gt;&lt;/code&gt;                 | 直接输入提交信息。                                             |
| &lt;code&gt;-t &amp;#x3C;file&gt;, --template=&amp;#x3C;file&gt;&lt;/code&gt;              | 使用指定文件作为提交信息模板。                                 |
| &lt;code&gt;-s, --signoff&lt;/code&gt;                             | 在末尾添加 Signed-off-by。                                     |
| &lt;code&gt;-S[&amp;#x3C;keyid&gt;], --gpg-sign[=&amp;#x3C;keyid&gt;]&lt;/code&gt;         | 进行 GPG 签名。                                                |
| &lt;code&gt;-n, --no-verify&lt;/code&gt;                           | 跳过 pre-commit 和 commit-msg 钩子。                           |
| &lt;code&gt;--allow-empty&lt;/code&gt;                             | 允许没有文件变动的提交。                                       |
| &lt;code&gt;--allow-empty-message&lt;/code&gt;                     | 允许空信息提交。                                               |
| &lt;code&gt;--cleanup=&amp;#x3C;mode&gt;&lt;/code&gt;                          | 设置提交信息清理方式（strip, whitespace, verbatim, default）。 |
| &lt;code&gt;-e, --edit&lt;/code&gt;                                | 打开编辑器编辑信息。                                           |
| &lt;code&gt;--no-edit&lt;/code&gt;                                 | 不打开编辑器，直接提交。                                       |
| &lt;code&gt;--amend&lt;/code&gt;                                   | 覆盖最后一次提交。                                             |
| &lt;code&gt;--no-post-rewrite&lt;/code&gt;                         | 绕过 post-rewrite 钩子。                                       |
| &lt;code&gt;-i, --include&lt;/code&gt;                             | 在提交前将指定文件加入暂存。                                   |
| &lt;code&gt;-o, --only&lt;/code&gt;                                | 仅提交指定文件，忽略其他已暂存的内容。                         |
| &lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt;&lt;/code&gt;               | 从文件读取路径规范。                                           |
| &lt;code&gt;-u[&amp;#x3C;mode&gt;], --untracked-files[=&amp;#x3C;mode&gt;]&lt;/code&gt;    | 显示未追踪文件的模式（no, normal, all）。                      |&lt;/email&gt;&lt;/p&gt;
&lt;h3 id=&quot;9-git-diff&quot;&gt;9. &lt;code&gt;git diff&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; diff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; diff&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --staged&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：显示提交之间、提交与工作树之间等的差异由于参数极多，分为通用对比选项和特定路径选项。 完整参数列表：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                                                                      | 说明                                           |
| ----------------------------------------------------------------------------------------- | ---------------------------------------------- | --------- | ------- | -------------- |
| &lt;code&gt;通用对比选项 (Common Diff Options)&lt;/code&gt;                                                      |                                                |
| &lt;code&gt;-p, -u, --patch&lt;/code&gt;                                                                         | 生成补丁（默认模式）。                         |
| &lt;code&gt;-s, --no-patch&lt;/code&gt;                                                                          | 抑制文本差异输出。                             |
| &lt;code&gt;-u&amp;#x3C;n&gt;&lt;/code&gt;                                                                                   | 指定差异上下文的行数（默认 3）。               |
| &lt;code&gt;--raw&lt;/code&gt;                                                                                   | 以原始格式显示差异。                           |
| &lt;code&gt;--indent-heuristic / --no-indent-heuristic&lt;/code&gt;                                              | 启用/禁用启发式算法以使差异更易读。            |
| &lt;code&gt;--minimal&lt;/code&gt;                                                                               | 花更多时间寻找最小差异。                       |
| &lt;code&gt;--patience / --histogram&lt;/code&gt;                                                                | 使用不同的差异算法。                           |
| &lt;code&gt;--diff-algorithm={patience                                                               | minimal                                        | histogram | myers}&lt;/code&gt; | 手动选定算法。 |
| &lt;code&gt;--stat[=&amp;#x3C;width&gt;[,&amp;#x3C;name-width&gt;[,&amp;#x3C;count&gt;]]]&lt;/code&gt;                                               | 生成文件名和修改行数的统计。                   |
| &lt;code&gt;--numstat&lt;/code&gt;                                                                               | 类似 stat，但显示数字格式且易于机器解析。      |
| &lt;code&gt;--shortstat&lt;/code&gt;                                                                             | 只显示统计摘要（一行）。                       |
| &lt;code&gt;--dirstat[=&amp;#x3C;param1,param2,...&gt;]&lt;/code&gt;                                                         | 显示目录级别的差异分布。                       |
| &lt;code&gt;--summary&lt;/code&gt;                                                                               | 显示扩展摘要（创建、更名等信息）。             |
| &lt;code&gt;-z&lt;/code&gt;                                                                                      | 输出使用 NUL 分隔符。                          |
| &lt;code&gt;--name-only&lt;/code&gt;                                                                             | 只显示修改的文件名。                           |
| &lt;code&gt;--name-status&lt;/code&gt;                                                                           | 显示文件名及状态（A, M, D 等）。               |
| &lt;code&gt;--submodule[=&amp;#x3C;format&gt;]&lt;/code&gt;                                                                  | 指定子模块差异的显示格式（log, short, diff）。 |
| &lt;code&gt;--color[=&amp;#x3C;when&gt;] / --no-color&lt;/code&gt;                                                           | 控制终端颜色输出。                             |
| &lt;code&gt;--word-diff[=&amp;#x3C;mode&gt;]&lt;/code&gt;                                                                    | 进行单词级别的差异对比。                       |
| &lt;code&gt;-B[&amp;#x3C;n&gt;][/&amp;#x3C;m&gt;]&lt;/code&gt;                                                                           | 断开完全重写的文件对比。                       |
| &lt;code&gt;-M[&amp;#x3C;n&gt;]&lt;/code&gt;                                                                                 | 检测文件更名。                                 |
| &lt;code&gt;-C[&amp;#x3C;n&gt;]&lt;/code&gt;                                                                                 | 检测文件拷贝。                                 |
| &lt;code&gt;--find-copies-harder&lt;/code&gt;                                                                    | 更努力地寻找拷贝来源。                         |
| &lt;code&gt;-D, --irreversible-delete&lt;/code&gt;                                                               | 省略删除文件的原始内容。                       |
| &lt;code&gt;-O&amp;#x3C;orderfile&gt;&lt;/code&gt;                                                                           | 按指定文件中的顺序对文件差异进行排序。         |
| &lt;code&gt;--relative[=&amp;#x3C;path&gt;]&lt;/code&gt;                                                                     | 相对于指定路径显示差异。                       |
| &lt;code&gt;-a, --text&lt;/code&gt;                                                                              | 将所有文件视为文本处理。                       |
| &lt;code&gt;--ignore-cr-at-eol / --ignore-space-at-eol / --ignore-space-change / --ignore-all-space&lt;/code&gt; | 各种忽略空白的选项。                           |
| &lt;code&gt;--ws-error-highlight=&amp;#x3C;kind&gt;&lt;/code&gt;                                                             | 高亮显示空白错误（context, old, new）。        |
| &lt;code&gt;--ext-diff / --no-ext-diff&lt;/code&gt;                                                              | 是否使用外部差异工具。                         |
| &lt;code&gt;特定对比范围&lt;/code&gt;                                                                            |                                                |
| &lt;code&gt;git diff [&amp;#x3C;options&gt;] [--] [&amp;#x3C;path&gt;...]&lt;/code&gt;                                                   | 对比工作区与索引。                             |
| &lt;code&gt;git diff [&amp;#x3C;options&gt;] --cached [&amp;#x3C;commit&gt;] [--] [&amp;#x3C;path&gt;...]&lt;/code&gt;                               | 对比暂存区与提交。                             |
| &lt;code&gt;git diff [&amp;#x3C;options&gt;] &amp;#x3C;commit&gt; &amp;#x3C;commit&gt; [--] [&amp;#x3C;path&gt;...]&lt;/code&gt;                                 | 对比两个提交。                                 |&lt;/p&gt;
&lt;h3 id=&quot;10-git-fetch&quot;&gt;10. &lt;code&gt;git fetch&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; origin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：从另一个存储库下载对象和引用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                                    | 说明                                           |
| ------------------------------------------------------- | ---------------------------------------------- | ---- | ---------------------- |
| &lt;code&gt;--all&lt;/code&gt;                                                 | 获取所有远程仓库。                             |
| &lt;code&gt;-a, --append&lt;/code&gt;                                          | 将获取的引用追加到现有 FETCH_HEAD 而不是覆盖。 |
| &lt;code&gt;--atomic&lt;/code&gt;                                              | 使用原子操作更新引用。                         |
| &lt;code&gt;--depth=&amp;#x3C;depth&gt; / --deepen=&amp;#x3C;depth&gt;&lt;/code&gt;                    | 设置或增加浅克隆的深度。                       |
| &lt;code&gt;--shallow-since=&amp;#x3C;date&gt; / --shallow-exclude=&amp;#x3C;revision&gt;&lt;/code&gt; | 基于日期或版本限制历史下载。                   |
| &lt;code&gt;--unshallow&lt;/code&gt;                                           | 将浅克隆转换为完整仓库。                       |
| &lt;code&gt;--dry-run&lt;/code&gt;                                             | 显示将执行的操作但不实际更新。                 |
| &lt;code&gt;-f, --force&lt;/code&gt;                                           | 强制更新本地分支引用。                         |
| &lt;code&gt;-k, --keep&lt;/code&gt;                                            | 保留下载的 pack 文件。                         |
| &lt;code&gt;-p, --prune&lt;/code&gt;                                           | 获取后删除远程已不存在的追踪分支。             |
| &lt;code&gt;-P, --prune-tags&lt;/code&gt;                                      | 同时也清理远程已不存在的标签。                 |
| &lt;code&gt;-n, --no-tags&lt;/code&gt;                                         | 不获取标签。                                   |
| &lt;code&gt;-t, --tags&lt;/code&gt;                                            | 获取远程所有标签。                             |
| &lt;code&gt;--recurse-submodules[=yes                              | on-demand                                      | no]&lt;/code&gt; | 控制子模块的递归获取。 |
| &lt;code&gt;-j, --jobs=&amp;#x3C;n&gt;&lt;/code&gt;                                        | 并行下载的作业数。                             |
| &lt;code&gt;--set-upstream&lt;/code&gt;                                        | 设置本地分支的上游。                           |
| &lt;code&gt;--submodule-prefix=&amp;#x3C;path&gt;&lt;/code&gt;                             | 为子模块输出添加路径前缀。                     |
| &lt;code&gt;-q, --quiet / -v, --verbose / --progress&lt;/code&gt;              | 控制输出详细度。                               |
| &lt;code&gt;-o &amp;#x3C;option&gt;, --server-option=&amp;#x3C;option&gt;&lt;/code&gt;                 | 向服务器传递协议选项。                         |
| &lt;code&gt;--show-forced-updates / --no-show-forced-updates&lt;/code&gt;      | 显示强制更新的详细摘要。                       |
| &lt;code&gt;-4, --ipv4 / -6, --ipv6&lt;/code&gt;                               | 强制使用特定的 IP 协议。                       |&lt;/p&gt;
&lt;h3 id=&quot;11-git-gc&quot;&gt;11. &lt;code&gt;git gc&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; gc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：清除不必要的文件并优化本地存储库&lt;/p&gt;
&lt;/blockquote&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--aggressive&lt;/code&gt;&lt;/td&gt;&lt;td&gt;更深入地压缩，耗时更长。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--auto&lt;/code&gt;&lt;/td&gt;&lt;td&gt;检查是否有必要运行 gc，如果有则执行（通常在后台运行）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--prune=&amp;#x3C;date&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除早于指定日期的孤立对象（默认 2 周）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-prune&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不删除任何对象。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不显示进度。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制运行，即使有其他 gc 进程正在运行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--keep-largest-pack&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在重打包时保留最大的 pack 文件。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;12-git-grep&quot;&gt;12. &lt;code&gt;git grep&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;pattern&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：查找匹配模式的行&lt;/p&gt;
&lt;/blockquote&gt;





















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--cached&lt;/code&gt;&lt;/td&gt;&lt;td&gt;搜索索引中的文件而非工作树。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-index&lt;/code&gt;&lt;/td&gt;&lt;td&gt;搜索当前目录下未被 Git 管理的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--untracked&lt;/code&gt;&lt;/td&gt;&lt;td&gt;同时搜索未追踪的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--recurse-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;递归搜索所有子模块。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-i, --ignore-case&lt;/code&gt;&lt;/td&gt;&lt;td&gt;忽略大小写。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-w, --word-regexp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;匹配完整单词。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --invert-match&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示不匹配的行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-h / -H&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否在输出中显示文件名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-E, --extended-regexp / -G, --basic-regexp / -P, --perl-regexp / -F, --fixed-strings&lt;/code&gt;&lt;/td&gt;&lt;td&gt;选择正则引擎。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --line-number&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示行号。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--column&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示匹配项在行中的列数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l, --files-with-matches / -L, --files-without-match&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只显示文件名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-z, --null&lt;/code&gt;&lt;/td&gt;&lt;td&gt;文件名后接 NUL。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-c, --count&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示匹配行数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-p, --show-function&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示匹配行所属的函数名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-W, --function-context&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示整个函数的内容。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-e &amp;#x3C;pattern&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定匹配模式（支持多个）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--and / --or / --not / ( )&lt;/code&gt;&lt;/td&gt;&lt;td&gt;组合多个匹配模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--threads &amp;#x3C;num&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;并行搜索的线程数。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;13-git-init&quot;&gt;13. &lt;code&gt;git init&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [directory]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：创建或重新初始化 Git 仓库&lt;/p&gt;
&lt;/blockquote&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--bare&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建裸仓库（无工作树）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--template=&amp;#x3C;dir&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定模板目录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--separate-git-dir=&amp;#x3C;git-dir&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;将 .git 目录存放在别处并建立链接。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--initial-branch=&amp;#x3C;name&gt;, -b &amp;#x3C;name&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定初始分支名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--shared[=&amp;#x3C;permissions&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置仓库共享权限（group, all, 或者八进制数）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;14-git-log&quot;&gt;14. &lt;code&gt;git log&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; log&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --oneline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --graph&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：显示提交日志继承了 git diff 的大部分对比参数，并增加了日志特有参数。 完整参数列表：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                                 | 说明                                           |
| ---------------------------------------------------- | ---------------------------------------------- | ---- | ---- | -------------------------- |
| &lt;code&gt;-n &amp;#x3C;number&gt;&lt;/code&gt;                                        | 限制输出的提交数量。                           |
| &lt;code&gt;--follow&lt;/code&gt;                                           | 继续列出重命名之前的文件历史（仅限单个路径）。 |
| &lt;code&gt;--decorate[=short                                   | full                                           | auto | no]&lt;/code&gt; | 是否显示分支、标签等名称。 |
| &lt;code&gt;--source&lt;/code&gt;                                           | 显示每个提交是从哪个分支引用的。               |
| &lt;code&gt;--[no-]mailmap&lt;/code&gt;                                     | 是否使用 mailmap 文件映射作者名/邮箱。         |
| &lt;code&gt;--full-diff&lt;/code&gt;                                        | 即使限制了路径，也显示整个提交的 diff。        |
| &lt;code&gt;-L &amp;#x3C;start&gt;,&amp;#x3C;end&gt;:&amp;#x3C;file&gt;&lt;/code&gt;                            | 显示文件特定行范围的历史。                     |
| &lt;code&gt;筛选参数&lt;/code&gt;                                           |                                                |
| &lt;code&gt;--since, --after=&amp;#x3C;date&gt; / --until, --before=&amp;#x3C;date&gt;&lt;/code&gt; | 时间过滤。                                     |
| &lt;code&gt;--author=&amp;#x3C;pattern&gt; / --committer=&amp;#x3C;pattern&gt;&lt;/code&gt;         | 按作者/提交者过滤。                            |
| &lt;code&gt;--grep=&amp;#x3C;pattern&gt;&lt;/code&gt;                                   | 按提交信息关键词过滤。                         |
| &lt;code&gt;--all-match&lt;/code&gt;                                        | 多个 grep/author 必须同时满足。                |
| &lt;code&gt;--invert-grep&lt;/code&gt;                                      | 显示不匹配 grep 的提交。                       |
| &lt;code&gt;--merges / --no-merges&lt;/code&gt;                             | 只显示/不显示合并提交。                        |
| &lt;code&gt;--first-parent&lt;/code&gt;                                     | 只跟随第一个父提交。                           |
| &lt;code&gt;范围与引用参数&lt;/code&gt;                                     |                                                |
| &lt;code&gt;--all&lt;/code&gt;                                              | 显示所有引用的历史。                           |
| &lt;code&gt;--branches[=&amp;#x3C;pattern&gt;] / --tags / --remotes&lt;/code&gt;        | 显示分支/标签/远程引用。                       |
| &lt;code&gt;--reflog&lt;/code&gt;                                           | 显示 reflog 记录。                             |
| &lt;code&gt;--bisect&lt;/code&gt;                                           | 显示二分查找期间的日志。                       |
| &lt;code&gt;输出格式&lt;/code&gt;                                           |                                                |
| &lt;code&gt;--oneline&lt;/code&gt;                                          | 一行显示一个提交。                             |
| &lt;code&gt;--graph&lt;/code&gt;                                            | 显示字符图形化的分支演变图。                   |
| &lt;code&gt;--pretty=&amp;#x3C;format&gt;, --format=&amp;#x3C;format&gt;&lt;/code&gt;               | 自定义输出格式。                               |
| &lt;code&gt;--abbrev-commit&lt;/code&gt;                                    | 使用缩写的哈希值。                             |&lt;/p&gt;
&lt;h3 id=&quot;15-git-merge&quot;&gt;15. &lt;code&gt;git merge&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; merge&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：合并两个或多个开发历史&lt;/p&gt;
&lt;/blockquote&gt;









































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--stat, -n, --no-stat&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示/不显示合并后的差异统计。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--summary, --no-summary&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(已过时) 等同于 —stat。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--log[=&amp;#x3C;n&gt;], --no-log&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在合并提交信息中包含来自被合并分支的短日志。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--squash, --no-squash&lt;/code&gt;&lt;/td&gt;&lt;td&gt;将所有合并的更改压缩为一个新的提交，不保留分支历史。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ff, --no-ff, --ff-only&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定合并策略（快进、强制生成合并节点、仅允许快进）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--verify-signatures, --no-verify-signatures&lt;/code&gt;&lt;/td&gt;&lt;td&gt;验证被合并提交的 GPG 签名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s &amp;#x3C;strategy&gt;, --strategy=&amp;#x3C;strategy&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定合并策略（recursive, resolve, octopus, ours, subtree）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-X &amp;#x3C;option&gt;, --strategy-option=&amp;#x3C;option&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;向合并策略传递特定选项。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m &amp;#x3C;message&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置合并提交的信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-F &amp;#x3C;file&gt;, --file=&amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;从文件读取提交信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--edit, -e, --no-edit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;是否在提交前打开编辑器修改信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--cleanup=&amp;#x3C;mode&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;提交信息清理模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--rerere-autoupdate, --no-rerere-autoupdate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自动将冲突解决结果记录到索引。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--abort&lt;/code&gt;&lt;/td&gt;&lt;td&gt;发生冲突时放弃合并，恢复到合并前状态。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--quit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;退出合并过程，保留当前状态但不完成合并。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--continue&lt;/code&gt;&lt;/td&gt;&lt;td&gt;解决冲突后继续合并过程。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--allow-unrelated-histories&lt;/code&gt;&lt;/td&gt;&lt;td&gt;允许合并两个没有共同祖先的项目。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-S[&amp;#x3C;keyid&gt;], --gpg-sign[=&amp;#x3C;keyid&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用 GPG 签名合并提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--overwrite-ignore, --no-overwrite-ignore&lt;/code&gt;&lt;/td&gt;&lt;td&gt;允许/禁止覆盖被忽略的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --verbose&lt;/code&gt;&lt;/td&gt;&lt;td&gt;详细模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--progress, --no-progress&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制显示/不显示进度。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--autostash, --no-autostash&lt;/code&gt;&lt;/td&gt;&lt;td&gt;合并前自动 stash 未保存的修改，完成后 pop。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--into-name &amp;#x3C;branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定合并的目标名称（用于自定义脚本）。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;16-git-mv&quot;&gt;16. &lt;code&gt;git mv&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mv&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;sourc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destinatio&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：移动或重命名文件、目录或符号链接&lt;/p&gt;
&lt;/blockquote&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --verbose&lt;/code&gt;&lt;/td&gt;&lt;td&gt;详细模式，显示移动操作。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --dry-run&lt;/code&gt;&lt;/td&gt;&lt;td&gt;仅显示将要执行的操作，不实际移动。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;即使目标文件已存在也强制移动。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-k&lt;/code&gt;&lt;/td&gt;&lt;td&gt;跳过移动或重命名过程中产生的错误。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;17-git-pull&quot;&gt;17. &lt;code&gt;git pull&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pull&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：获取并集成远程或其他分支的更改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                              | 说明                         |
| ------------------------------------------------- | ---------------------------- | ------ | ---------------- | ---------------------------------------- |
| &lt;code&gt;-q, --quiet, -v, --verbose&lt;/code&gt;                      | 控制输出。                   |
| &lt;code&gt;--recurse-submodules[=yes                        | on-demand                    | no]&lt;/code&gt;   | 递归获取子模块。 |
| &lt;code&gt;--commit, --no-commit&lt;/code&gt;                           | 拉取后是否自动提交合并结果。 |
| &lt;code&gt;--edit, -e, --no-edit&lt;/code&gt;                           | 是否编辑合并信息。           |
| &lt;code&gt;--cleanup=&amp;#x3C;mode&gt;&lt;/code&gt;                                | 信息清理模式。               |
| &lt;code&gt;--ff, --no-ff, --ff-only&lt;/code&gt;                        | 合并选项。                   |
| &lt;code&gt;--log[=&amp;#x3C;n&gt;], --no-log&lt;/code&gt;                           | 包含短日志。                 |
| &lt;code&gt;--stat, -n, --no-stat&lt;/code&gt;                           | 显示统计。                   |
| &lt;code&gt;--squash, --no-squash&lt;/code&gt;                           | 压缩合并。                   |
| &lt;code&gt;-s &amp;#x3C;strategy&gt;, --strategy=&amp;#x3C;strategy&gt;&lt;/code&gt;            | 合并策略。                   |
| &lt;code&gt;-X &amp;#x3C;option&gt;, --strategy-option=&amp;#x3C;option&gt;&lt;/code&gt;         | 策略选项。                   |
| &lt;code&gt;--verify-signatures, --no-verify-signatures&lt;/code&gt;     | GPG 验证。                   |
| &lt;code&gt;--summary, --no-summary&lt;/code&gt;                         | 统计摘要。                   |
| &lt;code&gt;--autostash, --no-autostash&lt;/code&gt;                     | 自动暂存。                   |
| &lt;code&gt;--allow-unrelated-histories&lt;/code&gt;                     | 允许无关历史合并。           |
| &lt;code&gt;-r, --rebase[=false                              | true                         | merges | interactive]&lt;/code&gt;    | 核心参数，指定使用 rebase 而不是 merge。 |
| &lt;code&gt;--no-rebase&lt;/code&gt;                                     | 禁用 rebase。                |
| &lt;code&gt;--all&lt;/code&gt;                                           | 获取所有远程。               |
| &lt;code&gt;-p, --prune&lt;/code&gt;                                     | 清理失效分支。               |
| &lt;code&gt;-t, --tags&lt;/code&gt;                                      | 获取标签。                   |
| &lt;code&gt;--dry-run&lt;/code&gt;                                       | 演习。                       |
| &lt;code&gt;-f, --force&lt;/code&gt;                                     | 强制拉取。                   |
| &lt;code&gt;-k, --keep&lt;/code&gt;                                      | 保留 pack 文件。             |
| &lt;code&gt;--depth=&amp;#x3C;depth&gt;, --unshallow, --update-shallow&lt;/code&gt;  | 浅克隆相关选项。             |
| &lt;code&gt;--refmap=&amp;#x3C;refspec&gt;&lt;/code&gt;                              | 指定引用的映射关系。         |
| &lt;code&gt;-o &amp;#x3C;option&gt;, --server-option=&amp;#x3C;option&gt;&lt;/code&gt;           | 传递服务器协议选项。         |
| &lt;code&gt;--show-forced-updates, --no-show-forced-updates&lt;/code&gt; | 显示强制更新。               |&lt;/p&gt;
&lt;h3 id=&quot;18-git-push&quot;&gt;18. &lt;code&gt;git push&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：更新远程引用及相关对象&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                             | 说明                                       |
| ------------------------------------------------ | ------------------------------------------ | -------- | ----------------------- | ---------------- |
| &lt;code&gt;--all, --branches&lt;/code&gt;                              | 推送所有分支。                             |
| &lt;code&gt;--prune&lt;/code&gt;                                        | 删除远程已不存在的本地分支。               |
| &lt;code&gt;--mirror&lt;/code&gt;                                       | 镜像推送（所有引用）。                     |
| &lt;code&gt;-n, --dry-run&lt;/code&gt;                                  | 模拟推送。                                 |
| &lt;code&gt;--porcelain&lt;/code&gt;                                    | 机器可读输出。                             |
| &lt;code&gt;-d, --delete&lt;/code&gt;                                   | 删除远程引用。                             |
| &lt;code&gt;--tags&lt;/code&gt;                                         | 推送所有标签。                             |
| &lt;code&gt;--follow-tags&lt;/code&gt;                                  | 推送带注解的标签且该标签指向被推送的提交。 |
| &lt;code&gt;--[no-]signed, --signed=(true                   | false                                      | if-ask)&lt;/code&gt; | 使用 GPG 签名推送操作。 |
| &lt;code&gt;--[no-]atomic&lt;/code&gt;                                  | 原子推送。                                 |
| &lt;code&gt;-o &amp;#x3C;option&gt;, --server-option=&amp;#x3C;option&gt;&lt;/code&gt;          | 服务器选项。                               |
| &lt;code&gt;--receive-pack=&amp;#x3C;path&gt;, --exec=&amp;#x3C;path&gt;&lt;/code&gt;           | 指定远程接收程序的路径。                   |
| &lt;code&gt;--[no-]force-with-lease[=&amp;#x3C;refname&gt;[:&amp;#x3C;expect&gt;]]&lt;/code&gt; | 安全强推。                                 |
| &lt;code&gt;-f, --force&lt;/code&gt;                                    | 强制推送。                                 |
| &lt;code&gt;--force-if-includes&lt;/code&gt;                            | 如果包含远程更新则允许强推。               |
| &lt;code&gt;--[no-]push-option=&amp;#x3C;option&gt;&lt;/code&gt;                    | 传递推送选项。                             |
| &lt;code&gt;--[no-]recurse-submodules=(check                | on-demand                                  | only     | no)&lt;/code&gt;                    | 子模块推送行为。 |
| &lt;code&gt;--[no-]verify&lt;/code&gt;                                  | 跳过 pre-push 钩子。                       |
| &lt;code&gt;-t, --thin&lt;/code&gt;                                     | 使用瘦包传输（减少带宽）。                 |
| &lt;code&gt;-q, --quiet, -v, --verbose&lt;/code&gt;                     | 输出控制。                                 |
| &lt;code&gt;--progress&lt;/code&gt;                                     | 显示进度。                                 |
| &lt;code&gt;-u, --set-upstream&lt;/code&gt;                             | 建立追踪关系。                             |&lt;/p&gt;
&lt;h3 id=&quot;19-git-rebase&quot;&gt;19. &lt;code&gt;git rebase&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; rebase&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; rebase&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; HEAD~3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：在另一个基端之上重新应用提交&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                             | 说明                                           |
| ------------------------------------------------ | ---------------------------------------------- | ------------------------- | ------------------ |
| &lt;code&gt;--onto &amp;#x3C;newbase&gt;&lt;/code&gt;                               | 指定新的基准点。                               |
| &lt;code&gt;--keep-base&lt;/code&gt;                                    | 保持基准点（通常用于本地重排）。               |
| &lt;code&gt;--continue&lt;/code&gt;                                     | 解决冲突后继续 rebase。                        |
| &lt;code&gt;--abort&lt;/code&gt;                                        | 取消 rebase 并恢复到初始状态。                 |
| &lt;code&gt;--quit&lt;/code&gt;                                         | 退出 rebase 但保留当前状态。                   |
| &lt;code&gt;--apply, --no-apply&lt;/code&gt;                            | 使用 git apply 模式（旧模式）。                |
| &lt;code&gt;--merge, --no-merge&lt;/code&gt;                            | 使用合并后端（默认模式）。                     |
| &lt;code&gt;--empty=(drop                                   | keep                                           | ask)&lt;/code&gt;                     | 处理空提交的行为。 |
| &lt;code&gt;-m, --merge&lt;/code&gt;                                    | 同上。                                         |
| &lt;code&gt;-X &amp;#x3C;option&gt;, --strategy-option=&amp;#x3C;option&gt;&lt;/code&gt;        | 合并策略选项。                                 |
| &lt;code&gt;-s &amp;#x3C;strategy&gt;, --strategy=&amp;#x3C;strategy&gt;&lt;/code&gt;           | 合并策略。                                     |
| &lt;code&gt;--[no-]rerere-autoupdate&lt;/code&gt;                       | 自动冲突解决。                                 |
| &lt;code&gt;-q, --quiet, -v, --verbose&lt;/code&gt;                     | 输出详细度。                                   |
| &lt;code&gt;--stat, -n&lt;/code&gt;                                     | 显示统计。                                     |
| &lt;code&gt;--no-stat&lt;/code&gt;                                      | 不显示统计。                                   |
| &lt;code&gt;--committer-date-is-author-date, --ignore-date&lt;/code&gt; | 修改提交时间。                                 |
| &lt;code&gt;--reset-author-date&lt;/code&gt;                            | 重置作者时间。                                 |
| &lt;code&gt;--signoff&lt;/code&gt;                                      | 添加签名行。                                   |
| &lt;code&gt;-r, --rebase-merges[=(rebase-cousins            | no-rebase-cousins)]&lt;/code&gt;                           | 保留合并结构进行 rebase。 |
| &lt;code&gt;-x &amp;#x3C;cmd&gt;, --exec &amp;#x3C;cmd&gt;&lt;/code&gt;                         | 在每个提交应用后执行命令（常用于测试）。       |
| &lt;code&gt;--root&lt;/code&gt;                                         | 对根提交进行 rebase。                          |
| &lt;code&gt;--autosquash, --no-autosquash&lt;/code&gt;                  | 配合 fixup! 信息自动压缩。                     |
| &lt;code&gt;--autostash, --no-autostash&lt;/code&gt;                    | 自动暂存。                                     |
| &lt;code&gt;--[no-]reschedule-failed-exec&lt;/code&gt;                  | 如果 exec 失败，重新安排 rebase。              |
| &lt;code&gt;--fork-point, --no-fork-point&lt;/code&gt;                  | 自动寻找派生点。                               |
| &lt;code&gt;-i, --interactive&lt;/code&gt;                              | 交互式模式，允许 pick, squash, edit, drop 等。 |&lt;/p&gt;
&lt;h3 id=&quot;20-git-reset&quot;&gt;20. &lt;code&gt;git reset&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; reset&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --soft&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; HEAD~1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; reset&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --hard&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; HEAD&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：重置当前 HEAD 到指定状态&lt;/p&gt;
&lt;/blockquote&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式，仅报告错误。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;从文件中读取路径规范。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--pathspec-file-nul&lt;/code&gt;&lt;/td&gt;&lt;td&gt;路径规范以 NUL 分隔。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;模式选项&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--soft&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重置 HEAD，保留索引和工作区。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--mixed&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(默认) 重置 HEAD 和索引，保留工作区。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--hard&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重置 HEAD、索引和工作区（危险：丢弃所有未提交修改）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--merge&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重置 HEAD 和索引，尝试保留工作区中未受冲突影响的修改。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--keep&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重置 HEAD 和索引，如果工作区有本地修改则中止重置。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]recurse-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;控制是否递归重置子模块。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;&lt;td&gt;分隔选项和路径，用于重置特定文件而不移动 HEAD。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;21-git-restore&quot;&gt;21. &lt;code&gt;git restore&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; restore&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;fil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; restore&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --staged&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;fil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：还原工作树文件&lt;/p&gt;
&lt;/blockquote&gt;

























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s &amp;#x3C;tree&gt;, --source=&amp;#x3C;tree&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定恢复源（默认为索引或 HEAD）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-p, --patch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;交互式选择要还原的代码块。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-W, --worktree&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(默认) 还原工作树文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-S, --staged&lt;/code&gt;&lt;/td&gt;&lt;td&gt;还原暂存区（索引）文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--progress, --no-progress&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制显示进度。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ignore-unmerged&lt;/code&gt;&lt;/td&gt;&lt;td&gt;还原时忽略未合并的条目。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--overlay, --no-overlay&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定是否允许删除不在源中的文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--recurse-submodules, --no-recurse-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;递归恢复子模块。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--conflict=&amp;#x3C;style&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定冲突显示样式（merge, diff3）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ignore-skip-worktree-bits&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在稀疏检出模式下忽略 skip-worktree 位。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;从文件读取路径。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;22-git-revert&quot;&gt;22. &lt;code&gt;git revert&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; revert&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;commi&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：通过创建一个新的提交来撤销现有的提交&lt;/p&gt;
&lt;/blockquote&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;commit&gt;...&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定要撤销的提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-e, --edit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建提交前打开编辑器。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m &amp;#x3C;parent-number&gt;, --mainline &amp;#x3C;parent-number&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;撤销合并提交时指定父分支。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --no-commit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只修改工作区和索引，不自动创建提交。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s, --signoff&lt;/code&gt;&lt;/td&gt;&lt;td&gt;添加 Signed-off-by。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-S[&amp;#x3C;keyid&gt;], --gpg-sign[=&amp;#x3C;keyid&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;GPG 签名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--strategy=&amp;#x3C;strategy&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定合并策略。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-X, --strategy-option=&amp;#x3C;option&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;策略选项。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--cleanup=&amp;#x3C;mode&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;信息清理模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--reference&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(已废弃) 过去用于记录来源。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--abort, --quit, --continue, --skip&lt;/code&gt;&lt;/td&gt;&lt;td&gt;流程控制。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;23-git-rm&quot;&gt;23. &lt;code&gt;git rm&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; rm&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;fil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：从工作树和索引中删除文件&lt;/p&gt;
&lt;/blockquote&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制删除（即使文件有修改）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --dry-run&lt;/code&gt;&lt;/td&gt;&lt;td&gt;演习模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/td&gt;&lt;td&gt;递归删除目录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--cached&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只从索引中删除，保留工作树中的物理文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ignore-unmatch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;即使没有匹配的文件也以 0 退出（不报错）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt; / --pathspec-file-nul&lt;/code&gt;&lt;/td&gt;&lt;td&gt;批量路径处理。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;24-git-show&quot;&gt;24. &lt;code&gt;git show&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; show&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;commi&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：显示各种类型的对象（提交、标签、树等）&lt;/p&gt;
&lt;/blockquote&gt;









































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]patch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示/不显示补丁。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s, --no-patch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;抑制文本差异。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--stat / --numstat / --shortstat&lt;/code&gt;&lt;/td&gt;&lt;td&gt;统计信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--format=&amp;#x3C;format&gt; / --pretty=&amp;#x3C;format&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;输出格式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--abbrev-commit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;缩写哈希。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]notes[=&amp;#x3C;ref&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示备注。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--show-signature&lt;/code&gt;&lt;/td&gt;&lt;td&gt;验证 GPG 签名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;集成 git diff 所有参数&lt;/code&gt;&lt;/td&gt;&lt;td&gt;如 —color, —word-diff 等。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;25-git-stash&quot;&gt;25. &lt;code&gt;git stash&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; stash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; stash&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：暂存脏工作目录中的更改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                            | 说明                               |
| ------------------------------- | ---------------------------------- | ---------------------- |
| &lt;code&gt;list&lt;/code&gt;                          | 列出所有暂存记录。                 |
| &lt;code&gt;show [&amp;#x3C;stash&gt;]&lt;/code&gt;                | 查看某个暂存的具体改动。           |
| &lt;code&gt;drop [-q                       | --quiet] [&amp;#x3C;stash&gt;]&lt;/code&gt;                | 删除某个暂存记录。     |
| &lt;code&gt;pop [--index] [-q              | --quiet] [&amp;#x3C;stash&gt;]&lt;/code&gt;                | 恢复暂存并删除记录。   |
| &lt;code&gt;apply [--index] [-q            | --quiet] [&amp;#x3C;stash&gt;]&lt;/code&gt;                | 恢复暂存但不删除记录。 |
| &lt;code&gt;branch &amp;#x3C;branchname&gt; [&amp;#x3C;stash&gt;]&lt;/code&gt; | 从暂存记录创建新分支。             |
| &lt;code&gt;push&lt;/code&gt;                          | 推入暂存区。                       |
| &lt;code&gt;-p, --patch&lt;/code&gt;                   | 交互式选择。                       |
| &lt;code&gt;-k, --[no-]keep-index&lt;/code&gt;         | 暂存后保留索引中的内容。           |
| &lt;code&gt;-u, --include-untracked&lt;/code&gt;       | 包含未追踪文件。                   |
| &lt;code&gt;-a, --all&lt;/code&gt;                     | 包含所有文件（含忽略文件）。       |
| &lt;code&gt;-m &amp;#x3C;message&gt;&lt;/code&gt;                  | 添加备注。                         |
| &lt;code&gt;--pathspec-from-file=&amp;#x3C;file&gt;&lt;/code&gt;   | 路径过滤。                         |
| &lt;code&gt;clear&lt;/code&gt;                         | 清除所有暂存记录。                 |
| &lt;code&gt;create / store&lt;/code&gt;                | (底层) 手动创建和存储 stash 对象。 |&lt;/p&gt;
&lt;h3 id=&quot;26-git-status&quot;&gt;26. &lt;code&gt;git status&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：显示工作树状态&lt;/p&gt;
&lt;/blockquote&gt;

























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --verbose&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示具体改动的 diff。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s, --short&lt;/code&gt;&lt;/td&gt;&lt;td&gt;短格式输出。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-b, --branch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示当前分支和追踪信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--show-stash&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示 stash 的数量。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--porcelain[=&amp;#x3C;version&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;机器可读的输出格式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--long&lt;/code&gt;&lt;/td&gt;&lt;td&gt;长格式输出（默认）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-u[&amp;#x3C;mode&gt;], --untracked-files[=&amp;#x3C;mode&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;未追踪文件显示模式（no, normal, all）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ignore-submodules[=&amp;#x3C;when&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;忽略子模块变动（none, untracked, dirty, all）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ignored[=&amp;#x3C;mode&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示被忽略的文件（no, traditional, matching）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-z&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用 NUL 终止符。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--no-ahead-behind&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不计算领先/落后数量。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--renormalize&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示重归一化后的状态。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;27-git-submodule&quot;&gt;27. &lt;code&gt;git submodule&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; submodule&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;repositor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; submodule&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：初始化、更新或检查子模块&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                                       | 说明                               |
| ---------------------------------------------------------- | ---------------------------------- | ---------------------- |
| &lt;code&gt;add [-b &amp;#x3C;branch&gt;] [--name &amp;#x3C;name&gt;] &amp;#x3C;repository&gt; [&amp;#x3C;path&gt;]&lt;/code&gt;  | 添加子模块。                       |
| &lt;code&gt;status [--cached] [--recursive]&lt;/code&gt;                          | 显示子模块状态。                   |
| &lt;code&gt;init [&amp;#x3C;path&gt;...]&lt;/code&gt;                                         | 初始化子模块配置。                 |
| &lt;code&gt;deinit [-f                                                | --force] [&amp;#x3C;path&gt;...]&lt;/code&gt;              | 注销子模块。           |
| &lt;code&gt;update [--init] [--remote] [-f] [--rebase                 | --merge] [--recursive]&lt;/code&gt;            | 更新子模块到指定提交。 |
| &lt;code&gt;set-branch (-b                                            | --branch) &amp;#x3C;branch&gt; [&amp;#x3C;path&gt;]&lt;/code&gt;       | 设置子模块追踪的分支。 |
| &lt;code&gt;set-url [&amp;#x3C;path&gt;] &amp;#x3C;newurl&gt;&lt;/code&gt;                                | 修改子模块仓库地址。               |
| &lt;code&gt;summary [--cached] [--for-status] [&amp;#x3C;commit&gt;] [&amp;#x3C;path&gt;...]&lt;/code&gt; | 显示子模块变更摘要。               |
| &lt;code&gt;foreach [--recursive] &amp;#x3C;command&gt;&lt;/code&gt;                          | 在每个子模块执行 shell 指令。      |
| &lt;code&gt;sync [--recursive] [&amp;#x3C;path&gt;...]&lt;/code&gt;                           | 同步子模块的 URL 配置。            |
| &lt;code&gt;absorbgitdirs&lt;/code&gt;                                            | 将子模块的 .git 目录吸收到主仓库。 |&lt;/p&gt;
&lt;h3 id=&quot;28-git-switch&quot;&gt;28. &lt;code&gt;git switch&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; switch&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; switch&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;new-branc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：切换分支&lt;/p&gt;
&lt;/blockquote&gt;

















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-c &amp;#x3C;new_branch&gt;, --create &amp;#x3C;new_branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建并切换。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-C &amp;#x3C;new_branch&gt;, --force-create &amp;#x3C;new_branch&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制创建并切换。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-d, --detach&lt;/code&gt;&lt;/td&gt;&lt;td&gt;切换到游离 HEAD。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-t, --track / --no-track&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置上游关系。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--guess / --no-guess&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自动推测远程分支名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;丢弃本地修改并切换。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m, --merge&lt;/code&gt;&lt;/td&gt;&lt;td&gt;切换时合并修改。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-q, --quiet&lt;/code&gt;&lt;/td&gt;&lt;td&gt;安静模式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--progress&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示进度。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--recurse-submodules / --no-recurse-submodules&lt;/code&gt;&lt;/td&gt;&lt;td&gt;递归处理子模块。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;29-git-tag&quot;&gt;29. &lt;code&gt;git tag&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tag&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tag-nam&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tag&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -a&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tag-nam&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;message&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：创建、列出、删除或验证标签&lt;/p&gt;
&lt;/blockquote&gt;

































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-a, --annotate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;创建带注解的标签（推荐）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-m &amp;#x3C;msg&gt;, -F &amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定标签信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s, --sign&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用 GPG 签名标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-u &amp;#x3C;keyid&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定签名使用的私钥。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --force&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制重置已存在的标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-d, --delete&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v, --verify&lt;/code&gt;&lt;/td&gt;&lt;td&gt;验证 GPG 签名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l, --list&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n[&amp;#x3C;num&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出标签及对应的消息行数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--contains [&amp;#x3C;commit&gt;] / --no-contains&lt;/code&gt;&lt;/td&gt;&lt;td&gt;筛选包含/不包含某提交的标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--points-at &amp;#x3C;object&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指向特定对象的标签。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--merged [&amp;#x3C;commit&gt;] / --no-merged&lt;/code&gt;&lt;/td&gt;&lt;td&gt;合并筛选。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--sort=&amp;#x3C;key&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;排序。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--format=&amp;#x3C;format&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自定义输出。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;30-git-config&quot;&gt;30. &lt;code&gt;git config&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; user.name&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;name&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; user.email&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;email&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：获取和设置仓库或全局选项&lt;/p&gt;
&lt;/blockquote&gt;













































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;文件位置选项&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--global&lt;/code&gt;&lt;/td&gt;&lt;td&gt;读写全局配置文件（~/.gitconfig）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--system&lt;/code&gt;&lt;/td&gt;&lt;td&gt;读写系统级配置文件（/etc/gitconfig）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--local&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(默认) 读写当前仓库配置文件（.git/config）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--worktree&lt;/code&gt;&lt;/td&gt;&lt;td&gt;读写当前工作树的配置文件（用于多工作树）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f &amp;#x3C;file&gt;, --file &amp;#x3C;file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定任意配置文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--blob &amp;#x3C;blob&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;从指定的 Git blob 对象中读取配置。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;操作动作&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--get&lt;/code&gt;&lt;/td&gt;&lt;td&gt;获取给定键的值。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--get-all&lt;/code&gt;&lt;/td&gt;&lt;td&gt;获取键的所有值（用于多值键）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--get-regexp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;获取匹配正则的键及其值。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--get-urlmatch &amp;#x3C;name&gt; &amp;#x3C;url&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;获取最匹配指定 URL 的配置（如 http 代理）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--replace-all&lt;/code&gt;&lt;/td&gt;&lt;td&gt;替换匹配模式的所有行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--add&lt;/code&gt;&lt;/td&gt;&lt;td&gt;添加新行而不替换。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--unset&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除匹配的行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--unset-all&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除匹配的所有行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--rename-section&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重构配置段。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--remove-section&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除整个配置段。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l, --list&lt;/code&gt;&lt;/td&gt;&lt;td&gt;列出所有配置及其来源。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-e, --edit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;打开编辑器修改。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--get-color &amp;#x3C;name&gt; [&amp;#x3C;default&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;获取配置的颜色。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--get-colorbool &amp;#x3C;name&gt; [&amp;#x3C;stdout-is-tty&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;获取是否应使用颜色。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;值类型约束&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--type &amp;#x3C;type&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;强制转换类型（bool, int, bool-or-int, path, expiry-date）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--bool, --int, --bool-or-int, --path, --expiry-date&lt;/code&gt;&lt;/td&gt;&lt;td&gt;(过时，建议用 —type)。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;输出控制&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-z, --null&lt;/code&gt;&lt;/td&gt;&lt;td&gt;输出以 NUL 字符结束。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--name-only&lt;/code&gt;&lt;/td&gt;&lt;td&gt;仅输出键名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--show-origin&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示配置的来源文件。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--show-scope&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示配置的作用域（local, global, system, command）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--fixed-value&lt;/code&gt;&lt;/td&gt;&lt;td&gt;将值模式视为字面量字符串而非正则。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--default &amp;#x3C;value&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;如果没有匹配项，输出默认值。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--includes / --no-includes&lt;/code&gt;&lt;/td&gt;&lt;td&gt;查找时是否遵循 include 指令。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;31-git-reflog&quot;&gt;31. &lt;code&gt;git reflog&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; reflog&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：管理引用日志（记录 HEAD 的每一次移动）&lt;/p&gt;
&lt;/blockquote&gt;

















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;show [&amp;#x3C;ref&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示指定引用的日志。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;expire&lt;/code&gt;&lt;/td&gt;&lt;td&gt;清理过期的日志条目。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--expire=&amp;#x3C;time&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置过期时间（默认 90 天）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--expire-unreachable=&amp;#x3C;time&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;设置不可达条目的过期时间（默认 30 天）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--all&lt;/code&gt;&lt;/td&gt;&lt;td&gt;对所有引用执行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--rewrite&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重写。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--updateref&lt;/code&gt;&lt;/td&gt;&lt;td&gt;更新引用。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--stale-fix&lt;/code&gt;&lt;/td&gt;&lt;td&gt;修复旧的引用记录。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;delete &amp;#x3C;ref&gt;@ {&amp;#x3C;specifier&gt;}&lt;/code&gt;&lt;/td&gt;&lt;td&gt;删除特定条目。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;exists &amp;#x3C;ref&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;检查引用日志是否存在。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;32-git-remote&quot;&gt;32. &lt;code&gt;git remote&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; remote&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; origin&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ur&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; remote&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -v&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：管理追踪的远程仓库&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;| 选项                                      | 说明                  |
| ----------------------------------------- | --------------------- | -------------- | ------------------ |
| &lt;code&gt;set-head &amp;#x3C;name&gt; (-a                      | -d                    | &amp;#x3C;branch&gt;)&lt;/code&gt;     | 设置远程默认分支。 |
| &lt;code&gt;set-branches [--add] &amp;#x3C;name&gt; &amp;#x3C;branch&gt;...&lt;/code&gt; | 设置追踪的分支列表。  |
| &lt;code&gt;show [-n] &amp;#x3C;name&gt;...&lt;/code&gt;                     | 查看远程详情。        |
| &lt;code&gt;prune [-n                                | --dry-run] &amp;#x3C;name&gt;...&lt;/code&gt; | 清理陈旧分支。 |
| &lt;code&gt;update [-p                               | --prune] [&amp;#x3C;group&gt;     | &amp;#x3C;remote&gt;]...&lt;/code&gt;  | 批量获取更新。     |&lt;/p&gt;
&lt;h3 id=&quot;33-git-blame&quot;&gt;33. &lt;code&gt;git blame&lt;/code&gt;&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; blame&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：显示文件的每一行最后是谁修改的参数非常详尽，用于深度回溯。 完整参数列表：&lt;/p&gt;
&lt;/blockquote&gt;

















































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-b&lt;/code&gt;&lt;/td&gt;&lt;td&gt;对边界提交显示空白的 SHA-1。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--root&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不把根提交视为边界。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--show-stats&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在输出结束时显示统计信息。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-L &amp;#x3C;start&gt;,&amp;#x3C;end&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只追踪指定范围的行（支持行号、正则、偏移量）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-l&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示长哈希值（默认缩写）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示原始时间戳。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-S &amp;#x3C;revs-file&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用来自文件的修订版本。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--reverse&lt;/code&gt;&lt;/td&gt;&lt;td&gt;反向追溯（查看某行在未来哪个提交被修改/删除）。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-p, --porcelain&lt;/code&gt;&lt;/td&gt;&lt;td&gt;输出专门为机器解析设计的格式。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--line-porcelain&lt;/code&gt;&lt;/td&gt;&lt;td&gt;在 porcelain 格式基础上增加每行内容。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--incremental&lt;/code&gt;&lt;/td&gt;&lt;td&gt;增量输出结果。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用 git annotate 风格。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--score-debug&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示文件内移动/复制的调试分数。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-f, --show-name&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示原始提交中的文件名。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-n, --show-number&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示原始提交中的行号。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;&lt;td&gt;抑制作者姓名和时间戳的显示。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-e, --show-email&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示作者邮箱。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-w&lt;/code&gt;&lt;/td&gt;&lt;td&gt;忽略空白字符的变化。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--[no-]abbrev[=&amp;#x3C;n&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定哈希缩写长度。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--indent-heuristic&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使用缩进启发式算法。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--color-lines&lt;/code&gt;&lt;/td&gt;&lt;td&gt;对行注释进行着色。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--color-by-age&lt;/code&gt;&lt;/td&gt;&lt;td&gt;按代码年龄着色。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--minimal&lt;/code&gt;&lt;/td&gt;&lt;td&gt;花更多时间寻找最小改动。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-M[&amp;#x3C;num&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;检测文件内的移动。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-C[&amp;#x3C;num&gt;]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;检测从其他文件移动或复制而来的行。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-h&lt;/code&gt;&lt;/td&gt;&lt;td&gt;显示简要帮助。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&quot;附录git-高级概念&quot;&gt;附录：Git 高级概念&lt;/h2&gt;
&lt;h3 id=&quot;用户接口定义-user-facing-interfaces&quot;&gt;用户接口定义 (User-facing Interfaces)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;gitattributes&lt;/strong&gt;：定义了针对特定路径的属性（如换行符处理、合并策略、差异过滤）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gitignore&lt;/strong&gt;：匹配规则：/ 前缀表示根目录，* 通配符，! 取反&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;githooks&lt;/strong&gt;：关键钩子包括 pre-commit, commit-msg, post-merge, pre-push, update, post-receive&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gitrevisions&lt;/strong&gt;：参数解析顺序、路径规范（Pathspec）语法、修订版本选择语法&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;开发者协议与格式-developer-facing&quot;&gt;开发者协议与格式 (Developer-facing)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;format-bundle&lt;/strong&gt;：.bundle 文件格式定义&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;format-index&lt;/strong&gt;：Git 索引文件格式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;format-pack&lt;/strong&gt;：打包文件（.pack/.idx）格式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;protocol-v2&lt;/strong&gt;：Git 有线传输协议版本 2（高性能传输协议）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;外部命令-external-commands&quot;&gt;外部命令 (External Commands)&lt;/h3&gt;
&lt;p&gt;这些是你系统中安装的、以 &lt;code&gt;git-&lt;/code&gt; 开头的非 Git 原生工具，Git 允许直接调用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bloom-*&lt;/strong&gt;：Open Robotics 提供的机器人软件发布工具（常用于 ROS 2 仓库管理）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;clang-format&lt;/strong&gt;：代码格式化工具，你可以通过 &lt;code&gt;git clang-format&lt;/code&gt; 对暂存区代码进行自动格式化&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;推荐的高阶组合&quot;&gt;推荐的高阶组合&lt;/h2&gt;
&lt;p&gt;这份全集涵盖了从最基础的 add 到最底层的 write-tree，以及与 CVS/SVN 交互的所有工具。建议重点掌握以下”高阶组合”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;调试神器&lt;/strong&gt;：&lt;code&gt;git bisect run&lt;/code&gt;（自动化找 Bug）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;清理神器&lt;/strong&gt;：&lt;code&gt;git clean -fd&lt;/code&gt;（移除构建生成的杂质）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;协作神器&lt;/strong&gt;：&lt;code&gt;git rebase -i&lt;/code&gt;（整理提交记录，让你的 GitHub 仓库看起来非常专业）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;底层操作&lt;/strong&gt;：&lt;code&gt;git rev-parse --show-toplevel&lt;/code&gt;（在脚本中自动定位工程根目录）&lt;/li&gt;
&lt;/ul&gt;</content:encoded><dc:creator>Neomelt</dc:creator><dc:date>2025-01-31T01:28:00.000Z</dc:date><dcterms:modified>2026-05-01T17:49:48.000Z</dcterms:modified><category>知识</category><category>git</category><category>速查</category><author>Neomelt</author><comments>https://www.neomelt.cloud/posts/quick-git-command-lookup#comments</comments></item></channel></rss>