<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>creativity</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>http://zncddh.cn/</id>
  <link href="http://zncddh.cn/" rel="alternate"/>
  <link href="http://zncddh.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, creativity</rights>
  <subtitle>学习记录与日常随笔</subtitle>
  <title>dream</title>
  <updated>2026-04-24T10:52:46.432Z</updated>
  <entry>
    <author>
      <name>creativity</name>
    </author>
    <content>
      <![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo new <span class="hljs-string">&quot;My New Post&quot;</span><br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo server<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo generate<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo deploy<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]>
    </content>
    <id>http://zncddh.cn/2026/04/24/hello-world/</id>
    <link href="http://zncddh.cn/2026/04/24/hello-world/"/>
    <published>2026-04-24T10:52:46.432Z</published>
    <summary>
      <![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a>]]>
    </summary>
    <title>Hello World</title>
    <updated>2026-04-24T10:52:46.432Z</updated>
  </entry>
  <entry>
    <author>
      <name>creativity</name>
    </author>
    <category term="学习记录" scheme="http://zncddh.cn/categories/%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/"/>
    <category term="git" scheme="http://zncddh.cn/tags/git/"/>
    <content>
      <![CDATA[<figure class="highlight md"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><code class="hljs md"><span class="hljs-section"># Git 学习笔记</span><br><br><span class="hljs-section">## 一、Git 是什么？</span><br><br>Git 是一个<span class="hljs-strong">**版本控制工具**</span>，主要用来管理代码的修改历史。<br><br>简单理解：<br><br><span class="hljs-quote">&gt; Git 可以帮我们记录代码的每一次修改，并且可以在需要时回到之前的版本。</span><br><br>Git 常用于：<br><br><span class="hljs-bullet">-</span> 保存代码历史版本<br><span class="hljs-bullet">-</span> 回退错误修改<br><span class="hljs-bullet">-</span> 多人协作开发<br><span class="hljs-bullet">-</span> 创建分支开发新功能<br><span class="hljs-bullet">-</span> 将代码上传到 GitHub、GitLab、Gitee 等远程仓库<br><br>---<br><br><span class="hljs-section">## 二、Git 的基本工作流程</span><br><br>Git 的日常使用流程可以概括为：<br><br><span class="hljs-code">```text</span><br><span class="hljs-code">工作区 -&gt; 暂存区 -&gt; 本地仓库 -&gt; 远程仓库</span><br></code></pre></td></tr></table></figure><p>对应命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br>git commit -m <span class="hljs-string">&quot;提交说明&quot;</span><br>git push<br></code></pre></td></tr></table></figure><h3 id="1-工作区"><a href="#1-工作区" class="headerlink" title="1. 工作区"></a>1. 工作区</h3><p>工作区就是我们平时写代码、修改文件的地方。</p><p>例如：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">index.html<br>style.css<br>main.js<br></code></pre></td></tr></table></figure><p>这些文件所在的项目目录就是工作区。</p><h3 id="2-暂存区"><a href="#2-暂存区" class="headerlink" title="2. 暂存区"></a>2. 暂存区</h3><p>暂存区用于临时保存准备提交的修改。</p><p>把文件加入暂存区：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add 文件名<br></code></pre></td></tr></table></figure><p>添加所有修改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br></code></pre></td></tr></table></figure><h3 id="3-本地仓库"><a href="#3-本地仓库" class="headerlink" title="3. 本地仓库"></a>3. 本地仓库</h3><p>本地仓库保存已经提交的版本记录。</p><p>提交代码：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit -m <span class="hljs-string">&quot;提交说明&quot;</span><br></code></pre></td></tr></table></figure><h3 id="4-远程仓库"><a href="#4-远程仓库" class="headerlink" title="4. 远程仓库"></a>4. 远程仓库</h3><p>远程仓库一般指 GitHub、GitLab、Gitee 上的仓库。</p><p>推送到远程仓库：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push<br></code></pre></td></tr></table></figure><hr><h2 id="三、安装-Git"><a href="#三、安装-Git" class="headerlink" title="三、安装 Git"></a>三、安装 Git</h2><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><p>下载地址：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">https://git-scm.com/<br></code></pre></td></tr></table></figure><p>安装完成后，打开 Git Bash 或终端，输入：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git --version<br></code></pre></td></tr></table></figure><p>如果能看到版本号，说明安装成功。</p><hr><h3 id="macOS"><a href="#macOS" class="headerlink" title="macOS"></a>macOS</h3><p>查看是否已安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git --version<br></code></pre></td></tr></table></figure><p>使用 Homebrew 安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">brew install git<br></code></pre></td></tr></table></figure><hr><h3 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h3><p>Ubuntu &#x2F; Debian：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> apt update<br><span class="hljs-built_in">sudo</span> apt install git<br></code></pre></td></tr></table></figure><p>CentOS：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> yum install git<br></code></pre></td></tr></table></figure><hr><h2 id="四、Git-初始配置"><a href="#四、Git-初始配置" class="headerlink" title="四、Git 初始配置"></a>四、Git 初始配置</h2><p>第一次使用 Git，需要配置用户名和邮箱。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --global user.name <span class="hljs-string">&quot;你的名字&quot;</span><br>git config --global user.email <span class="hljs-string">&quot;你的邮箱&quot;</span><br></code></pre></td></tr></table></figure><p>查看配置：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --list<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git config --global user.name <span class="hljs-string">&quot;zhangsan&quot;</span><br>git config --global user.email <span class="hljs-string">&quot;zhangsan@example.com&quot;</span><br></code></pre></td></tr></table></figure><h3 id="笔记"><a href="#笔记" class="headerlink" title="笔记"></a>笔记</h3><p><code>--global</code> 表示全局配置，对当前电脑上的所有 Git 项目生效。</p><hr><h2 id="五、创建-Git-仓库"><a href="#五、创建-Git-仓库" class="headerlink" title="五、创建 Git 仓库"></a>五、创建 Git 仓库</h2><h2 id="方式一：本地初始化仓库"><a href="#方式一：本地初始化仓库" class="headerlink" title="方式一：本地初始化仓库"></a>方式一：本地初始化仓库</h2><p>进入项目目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> my-project<br></code></pre></td></tr></table></figure><p>初始化 Git：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git init<br></code></pre></td></tr></table></figure><p>初始化后，项目中会生成一个隐藏目录：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">.git<br></code></pre></td></tr></table></figure><h3 id="笔记-1"><a href="#笔记-1" class="headerlink" title="笔记"></a>笔记</h3><p><code>.git</code> 文件夹保存了 Git 的版本信息，不要随便删除。</p><hr><h2 id="方式二：克隆远程仓库"><a href="#方式二：克隆远程仓库" class="headerlink" title="方式二：克隆远程仓库"></a>方式二：克隆远程仓库</h2><p>从远程仓库下载代码：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> 仓库地址<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">clone</span> https://github.com/user/demo.git<br></code></pre></td></tr></table></figure><p>进入项目：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> demo<br></code></pre></td></tr></table></figure><hr><h2 id="六、查看仓库状态"><a href="#六、查看仓库状态" class="headerlink" title="六、查看仓库状态"></a>六、查看仓库状态</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git status<br></code></pre></td></tr></table></figure><p>这个命令非常常用，用来查看当前项目的状态。</p><p>常见状态：</p><table><thead><tr><th>状态</th><th>含义</th></tr></thead><tbody><tr><td>untracked</td><td>新文件，还没有被 Git 管理</td></tr><tr><td>modified</td><td>文件被修改了</td></tr><tr><td>staged</td><td>文件已加入暂存区</td></tr><tr><td>clean</td><td>没有需要提交的内容</td></tr></tbody></table><h3 id="学习重点"><a href="#学习重点" class="headerlink" title="学习重点"></a>学习重点</h3><p>提交代码前，建议先执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git status<br></code></pre></td></tr></table></figure><p>这样可以确认哪些文件被修改了。</p><hr><h2 id="七、添加文件到暂存区"><a href="#七、添加文件到暂存区" class="headerlink" title="七、添加文件到暂存区"></a>七、添加文件到暂存区</h2><p>添加单个文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add index.html<br></code></pre></td></tr></table></figure><p>添加多个文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add index.html style.css<br></code></pre></td></tr></table></figure><p>添加所有修改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br></code></pre></td></tr></table></figure><h3 id="笔记-2"><a href="#笔记-2" class="headerlink" title="笔记"></a>笔记</h3><p><code>git add .</code> 会把当前目录下所有修改都加入暂存区。</p><hr><h2 id="八、提交代码"><a href="#八、提交代码" class="headerlink" title="八、提交代码"></a>八、提交代码</h2><p>提交暂存区的内容：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit -m <span class="hljs-string">&quot;提交说明&quot;</span><br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit -m <span class="hljs-string">&quot;添加首页页面&quot;</span><br></code></pre></td></tr></table></figure><p>推荐写清楚提交内容：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit -m <span class="hljs-string">&quot;新增登录功能&quot;</span><br>git commit -m <span class="hljs-string">&quot;修复按钮样式问题&quot;</span><br>git commit -m <span class="hljs-string">&quot;更新 README 文档&quot;</span><br></code></pre></td></tr></table></figure><h3 id="笔记-3"><a href="#笔记-3" class="headerlink" title="笔记"></a>笔记</h3><p>提交说明不要随便写 <code>aaa</code>、<code>test</code>，最好说明这次提交做了什么。</p><hr><h2 id="九、查看提交历史"><a href="#九、查看提交历史" class="headerlink" title="九、查看提交历史"></a>九、查看提交历史</h2><p>查看详细提交记录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">log</span><br></code></pre></td></tr></table></figure><p>简洁查看：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">log</span> --oneline<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">a1b2c3d 添加首页页面<br>e4f5g6h 初始化项目<br></code></pre></td></tr></table></figure><h3 id="笔记-4"><a href="#笔记-4" class="headerlink" title="笔记"></a>笔记</h3><p>每一次提交都会生成一个 commit id，可以用来回退版本。</p><hr><h2 id="十、查看文件修改内容"><a href="#十、查看文件修改内容" class="headerlink" title="十、查看文件修改内容"></a>十、查看文件修改内容</h2><p>查看工作区修改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git diff<br></code></pre></td></tr></table></figure><p>查看暂存区修改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git diff --cached<br></code></pre></td></tr></table></figure><h3 id="使用场景"><a href="#使用场景" class="headerlink" title="使用场景"></a>使用场景</h3><p>提交之前，可以先用 <code>git diff</code> 查看自己改了哪些内容。</p><hr><h2 id="十一、撤销修改"><a href="#十一、撤销修改" class="headerlink" title="十一、撤销修改"></a>十一、撤销修改</h2><h3 id="1-撤销工作区修改"><a href="#1-撤销工作区修改" class="headerlink" title="1. 撤销工作区修改"></a>1. 撤销工作区修改</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git restore 文件名<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git restore index.html<br></code></pre></td></tr></table></figure><p>旧写法：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git checkout -- index.html<br></code></pre></td></tr></table></figure><h3 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h3><p>这个操作会丢弃当前文件的修改，需要谨慎使用。</p><hr><h3 id="2-取消暂存"><a href="#2-取消暂存" class="headerlink" title="2. 取消暂存"></a>2. 取消暂存</h3><p>如果已经执行了 <code>git add</code>，但不想提交某个文件，可以取消暂存：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git restore --staged 文件名<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git restore --staged index.html<br></code></pre></td></tr></table></figure><p>旧写法：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git reset HEAD index.html<br></code></pre></td></tr></table></figure><hr><h2 id="十二、删除文件"><a href="#十二、删除文件" class="headerlink" title="十二、删除文件"></a>十二、删除文件</h2><p>删除文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">rm</span> index.html<br></code></pre></td></tr></table></figure><p>提交删除操作：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br>git commit -m <span class="hljs-string">&quot;删除 index.html&quot;</span><br></code></pre></td></tr></table></figure><p>也可以使用 Git 命令删除：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">rm</span> index.html<br>git commit -m <span class="hljs-string">&quot;删除 index.html&quot;</span><br></code></pre></td></tr></table></figure><hr><h2 id="十三、分支管理"><a href="#十三、分支管理" class="headerlink" title="十三、分支管理"></a>十三、分支管理</h2><p>分支可以理解为一条独立的开发线。</p><p>常见分支：</p><table><thead><tr><th>分支</th><th>说明</th></tr></thead><tbody><tr><td>main &#x2F; master</td><td>主分支</td></tr><tr><td>dev</td><td>开发分支</td></tr><tr><td>feature-login</td><td>登录功能分支</td></tr><tr><td>bugfix</td><td>修复 bug 分支</td></tr></tbody></table><hr><h3 id="1-查看分支"><a href="#1-查看分支" class="headerlink" title="1. 查看分支"></a>1. 查看分支</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch<br></code></pre></td></tr></table></figure><p>查看本地和远程分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch -a<br></code></pre></td></tr></table></figure><hr><h3 id="2-创建分支"><a href="#2-创建分支" class="headerlink" title="2. 创建分支"></a>2. 创建分支</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch 分支名<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch dev<br></code></pre></td></tr></table></figure><hr><h3 id="3-切换分支"><a href="#3-切换分支" class="headerlink" title="3. 切换分支"></a>3. 切换分支</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git switch 分支名<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git switch dev<br></code></pre></td></tr></table></figure><p>旧写法：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git checkout dev<br></code></pre></td></tr></table></figure><hr><h3 id="4-创建并切换分支"><a href="#4-创建并切换分支" class="headerlink" title="4. 创建并切换分支"></a>4. 创建并切换分支</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git switch -c 分支名<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git switch -c feature-login<br></code></pre></td></tr></table></figure><p>旧写法：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git checkout -b feature-login<br></code></pre></td></tr></table></figure><hr><h3 id="5-合并分支"><a href="#5-合并分支" class="headerlink" title="5. 合并分支"></a>5. 合并分支</h3><p>先切换到要合并到的目标分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git switch main<br></code></pre></td></tr></table></figure><p>合并其他分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git merge feature-login<br></code></pre></td></tr></table></figure><h3 id="笔记-5"><a href="#笔记-5" class="headerlink" title="笔记"></a>笔记</h3><p>意思是：把 <code>feature-login</code> 分支的代码合并到 <code>main</code> 分支。</p><hr><h3 id="6-删除分支"><a href="#6-删除分支" class="headerlink" title="6. 删除分支"></a>6. 删除分支</h3><p>删除本地分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch -d 分支名<br></code></pre></td></tr></table></figure><p>强制删除：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch -D 分支名<br></code></pre></td></tr></table></figure><p>删除远程分支：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push origin --delete 分支名<br></code></pre></td></tr></table></figure><hr><h2 id="十四、远程仓库"><a href="#十四、远程仓库" class="headerlink" title="十四、远程仓库"></a>十四、远程仓库</h2><p>远程仓库一般托管在：</p><ul><li>GitHub</li><li>GitLab</li><li>Gitee</li><li>Bitbucket</li></ul><hr><h3 id="1-查看远程仓库"><a href="#1-查看远程仓库" class="headerlink" title="1. 查看远程仓库"></a>1. 查看远程仓库</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote -v<br></code></pre></td></tr></table></figure><hr><h3 id="2-添加远程仓库"><a href="#2-添加远程仓库" class="headerlink" title="2. 添加远程仓库"></a>2. 添加远程仓库</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote add origin 仓库地址<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote add origin https://github.com/user/demo.git<br></code></pre></td></tr></table></figure><hr><h3 id="3-修改远程仓库地址"><a href="#3-修改远程仓库地址" class="headerlink" title="3. 修改远程仓库地址"></a>3. 修改远程仓库地址</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote set-url origin 新仓库地址<br></code></pre></td></tr></table></figure><hr><h3 id="4-删除远程仓库地址"><a href="#4-删除远程仓库地址" class="headerlink" title="4. 删除远程仓库地址"></a>4. 删除远程仓库地址</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote remove origin<br></code></pre></td></tr></table></figure><hr><h2 id="十五、推送代码到远程仓库"><a href="#十五、推送代码到远程仓库" class="headerlink" title="十五、推送代码到远程仓库"></a>十五、推送代码到远程仓库</h2><p>第一次推送：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push -u origin main<br></code></pre></td></tr></table></figure><p>以后推送：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push<br></code></pre></td></tr></table></figure><p>如果主分支是 <code>master</code>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push -u origin master<br></code></pre></td></tr></table></figure><h3 id="笔记-6"><a href="#笔记-6" class="headerlink" title="笔记"></a>笔记</h3><p><code>-u</code> 的作用是建立本地分支和远程分支的关联，以后可以直接使用 <code>git push</code>。</p><hr><h2 id="十六、拉取远程代码"><a href="#十六、拉取远程代码" class="headerlink" title="十六、拉取远程代码"></a>十六、拉取远程代码</h2><p>拉取远程代码并合并：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git pull<br></code></pre></td></tr></table></figure><p>这个命令相当于：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git fetch<br>git merge<br></code></pre></td></tr></table></figure><p>只获取远程代码，不自动合并：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git fetch<br></code></pre></td></tr></table></figure><hr><h2 id="十七、解决冲突"><a href="#十七、解决冲突" class="headerlink" title="十七、解决冲突"></a>十七、解决冲突</h2><p>多人同时修改同一个文件时，可能会出现冲突。</p><p>冲突文件中可能会出现：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs text">&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<br>本地代码<br>=======<br>远程代码<br>&gt;&gt;&gt;&gt;&gt;&gt;&gt; origin/main<br></code></pre></td></tr></table></figure><p>需要手动修改成正确内容。</p><p>修改完成后：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br>git commit -m <span class="hljs-string">&quot;解决合并冲突&quot;</span><br></code></pre></td></tr></table></figure><h3 id="笔记-7"><a href="#笔记-7" class="headerlink" title="笔记"></a>笔记</h3><p>冲突不是错误，只是 Git 不知道应该保留哪一份代码，需要开发者手动判断。</p><hr><h2 id="十八、版本回退"><a href="#十八、版本回退" class="headerlink" title="十八、版本回退"></a>十八、版本回退</h2><h3 id="1-回退到上一个版本"><a href="#1-回退到上一个版本" class="headerlink" title="1. 回退到上一个版本"></a>1. 回退到上一个版本</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git reset --hard HEAD^<br></code></pre></td></tr></table></figure><h3 id="2-回退到指定版本"><a href="#2-回退到指定版本" class="headerlink" title="2. 回退到指定版本"></a>2. 回退到指定版本</h3><p>先查看提交记录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">log</span> --oneline<br></code></pre></td></tr></table></figure><p>然后复制 commit id：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git reset --hard commit_id<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git reset --hard a1b2c3d<br></code></pre></td></tr></table></figure><h3 id="注意-1"><a href="#注意-1" class="headerlink" title="注意"></a>注意</h3><p><code>--hard</code> 会丢弃当前工作区修改，使用前一定要确认。</p><hr><h2 id="十九、查看操作记录"><a href="#十九、查看操作记录" class="headerlink" title="十九、查看操作记录"></a>十九、查看操作记录</h2><p>如果误操作，可以查看 Git 操作历史：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git reflog<br></code></pre></td></tr></table></figure><p>然后恢复到指定版本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git reset --hard commit_id<br></code></pre></td></tr></table></figure><h3 id="笔记-8"><a href="#笔记-8" class="headerlink" title="笔记"></a>笔记</h3><p><code>git reflog</code> 是 Git 的“后悔药”，可以找回很多误操作前的版本。</p><hr><h2 id="二十、-gitignore-文件"><a href="#二十、-gitignore-文件" class="headerlink" title="二十、.gitignore 文件"></a>二十、.gitignore 文件</h2><p><code>.gitignore</code> 用来告诉 Git 哪些文件不需要提交。</p><p>常见内容：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs gitignore"># 依赖目录<br>node_modules/<br><br># 日志文件<br>*.log<br><br># 系统文件<br>.DS_Store<br><br># 环境变量文件<br>.env<br><br># 构建目录<br>dist/<br>build/<br><br># 编辑器配置<br>.vscode/<br>.idea/<br></code></pre></td></tr></table></figure><h3 id="常见使用场景"><a href="#常见使用场景" class="headerlink" title="常见使用场景"></a>常见使用场景</h3><p>不应该提交到 Git 的文件：</p><ul><li>依赖包</li><li>日志文件</li><li>临时文件</li><li>密码、密钥、环境变量文件</li><li>编译打包后的文件</li></ul><hr><h3 id="已经提交过的文件如何忽略？"><a href="#已经提交过的文件如何忽略？" class="headerlink" title="已经提交过的文件如何忽略？"></a>已经提交过的文件如何忽略？</h3><p>如果文件已经被 Git 跟踪，再写入 <code>.gitignore</code> 不会立即生效。</p><p>需要先取消跟踪：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">rm</span> -r --cached 文件或目录<br></code></pre></td></tr></table></figure><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git <span class="hljs-built_in">rm</span> -r --cached node_modules<br>git commit -m <span class="hljs-string">&quot;移除 node_modules 跟踪&quot;</span><br></code></pre></td></tr></table></figure><hr><h2 id="二十一、stash-临时保存修改"><a href="#二十一、stash-临时保存修改" class="headerlink" title="二十一、stash 临时保存修改"></a>二十一、stash 临时保存修改</h2><p>当你正在修改代码，但需要临时切换分支时，可以使用 <code>stash</code>。</p><p>保存当前修改：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git stash<br></code></pre></td></tr></table></figure><p>查看 stash 列表：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git stash list<br></code></pre></td></tr></table></figure><p>恢复最近一次保存：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git stash pop<br></code></pre></td></tr></table></figure><p>恢复但不删除 stash：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git stash apply<br></code></pre></td></tr></table></figure><p>删除 stash：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git stash drop<br></code></pre></td></tr></table></figure><p>清空所有 stash：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git stash clear<br></code></pre></td></tr></table></figure><h3 id="笔记-9"><a href="#笔记-9" class="headerlink" title="笔记"></a>笔记</h3><p><code>stash</code> 适合临时保存没有提交的修改。</p><hr><h2 id="二十二、标签-tag"><a href="#二十二、标签-tag" class="headerlink" title="二十二、标签 tag"></a>二十二、标签 tag</h2><p>标签一般用于标记项目版本。</p><p>例如：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">v1.0.0<br>v1.1.0<br>v2.0.0<br></code></pre></td></tr></table></figure><p>创建标签：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git tag v1.0.0<br></code></pre></td></tr></table></figure><p>查看标签：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git tag<br></code></pre></td></tr></table></figure><p>推送标签：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push origin v1.0.0<br></code></pre></td></tr></table></figure><p>推送所有标签：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push origin --tags<br></code></pre></td></tr></table></figure><p>删除本地标签：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git tag -d v1.0.0<br></code></pre></td></tr></table></figure><p>删除远程标签：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push origin --delete v1.0.0<br></code></pre></td></tr></table></figure><hr><h2 id="二十三、常用-Git-命令总结"><a href="#二十三、常用-Git-命令总结" class="headerlink" title="二十三、常用 Git 命令总结"></a>二十三、常用 Git 命令总结</h2><table><thead><tr><th>命令</th><th>作用</th></tr></thead><tbody><tr><td><code>git init</code></td><td>初始化 Git 仓库</td></tr><tr><td><code>git clone</code></td><td>克隆远程仓库</td></tr><tr><td><code>git status</code></td><td>查看仓库状态</td></tr><tr><td><code>git add .</code></td><td>添加所有修改到暂存区</td></tr><tr><td><code>git commit -m &quot;说明&quot;</code></td><td>提交代码</td></tr><tr><td><code>git log --oneline</code></td><td>查看提交历史</td></tr><tr><td><code>git branch</code></td><td>查看分支</td></tr><tr><td><code>git switch 分支名</code></td><td>切换分支</td></tr><tr><td><code>git switch -c 分支名</code></td><td>创建并切换分支</td></tr><tr><td><code>git merge 分支名</code></td><td>合并分支</td></tr><tr><td><code>git pull</code></td><td>拉取远程代码</td></tr><tr><td><code>git push</code></td><td>推送代码</td></tr><tr><td><code>git remote -v</code></td><td>查看远程仓库</td></tr><tr><td><code>git stash</code></td><td>临时保存修改</td></tr><tr><td><code>git reset --hard</code></td><td>回退版本</td></tr><tr><td><code>git reflog</code></td><td>查看操作记录</td></tr></tbody></table><hr><h2 id="二十四、常见问题笔记"><a href="#二十四、常见问题笔记" class="headerlink" title="二十四、常见问题笔记"></a>二十四、常见问题笔记</h2><h3 id="1-git-push-失败怎么办？"><a href="#1-git-push-失败怎么办？" class="headerlink" title="1. git push 失败怎么办？"></a>1. git push 失败怎么办？</h3><p>可能是远程仓库有新代码，本地没有同步。</p><p>解决：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">git pull<br>git push<br></code></pre></td></tr></table></figure><p>如果出现冲突，需要先解决冲突。</p><hr><h3 id="2-怎么查看当前在哪个分支？"><a href="#2-怎么查看当前在哪个分支？" class="headerlink" title="2. 怎么查看当前在哪个分支？"></a>2. 怎么查看当前在哪个分支？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch<br></code></pre></td></tr></table></figure><p>带 <code>*</code> 的就是当前分支。</p><hr><h3 id="3-提交说明写错了怎么办？"><a href="#3-提交说明写错了怎么办？" class="headerlink" title="3. 提交说明写错了怎么办？"></a>3. 提交说明写错了怎么办？</h3><p>修改最近一次提交说明：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit --amend -m <span class="hljs-string">&quot;新的提交说明&quot;</span><br></code></pre></td></tr></table></figure><hr><h3 id="4-文件-add-错了怎么办？"><a href="#4-文件-add-错了怎么办？" class="headerlink" title="4. 文件 add 错了怎么办？"></a>4. 文件 add 错了怎么办？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git restore --staged 文件名<br></code></pre></td></tr></table></figure><hr><h3 id="5-怎么把本地分支推送到远程？"><a href="#5-怎么把本地分支推送到远程？" class="headerlink" title="5. 怎么把本地分支推送到远程？"></a>5. 怎么把本地分支推送到远程？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push -u origin 分支名<br></code></pre></td></tr></table></figure><hr><h2 id="二十五、推荐提交规范"><a href="#二十五、推荐提交规范" class="headerlink" title="二十五、推荐提交规范"></a>二十五、推荐提交规范</h2><p>提交信息建议使用统一格式：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">类型: 提交说明<br></code></pre></td></tr></table></figure><p>常见类型：</p><table><thead><tr><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>feat</td><td>新功能</td></tr><tr><td>fix</td><td>修复 bug</td></tr><tr><td>docs</td><td>文档修改</td></tr><tr><td>style</td><td>样式修改</td></tr><tr><td>refactor</td><td>代码重构</td></tr><tr><td>test</td><td>测试相关</td></tr><tr><td>chore</td><td>工具、依赖、构建等杂项</td></tr></tbody></table><p>示例：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit -m <span class="hljs-string">&quot;feat: 新增用户登录功能&quot;</span><br>git commit -m <span class="hljs-string">&quot;fix: 修复登录按钮样式问题&quot;</span><br>git commit -m <span class="hljs-string">&quot;docs: 更新 Git 教程&quot;</span><br>git commit -m <span class="hljs-string">&quot;style: 调整首页布局&quot;</span><br></code></pre></td></tr></table></figure><hr><h2 id="二十六、完整操作示例"><a href="#二十六、完整操作示例" class="headerlink" title="二十六、完整操作示例"></a>二十六、完整操作示例</h2><p>新建项目：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">mkdir</span> demo<br><span class="hljs-built_in">cd</span> demo<br>git init<br></code></pre></td></tr></table></figure><p>创建 README 文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;# Demo 项目&quot;</span> &gt; README.md<br></code></pre></td></tr></table></figure><p>查看状态：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git status<br></code></pre></td></tr></table></figure><p>添加文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git add .<br></code></pre></td></tr></table></figure><p>提交代码：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git commit -m <span class="hljs-string">&quot;初始化项目&quot;</span><br></code></pre></td></tr></table></figure><p>添加远程仓库：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote add origin https://github.com/user/demo.git<br></code></pre></td></tr></table></figure><p>设置主分支名称：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch -M main<br></code></pre></td></tr></table></figure><p>推送代码：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">git push -u origin main<br></code></pre></td></tr></table></figure><hr><h2 id="二十七、学习路线"><a href="#二十七、学习路线" class="headerlink" title="二十七、学习路线"></a>二十七、学习路线</h2><p>建议按照下面的顺序学习 Git：</p><h3 id="第一阶段：基础操作"><a href="#第一阶段：基础操作" class="headerlink" title="第一阶段：基础操作"></a>第一阶段：基础操作</h3><p>重点掌握：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">git init<br>git status<br>git add .<br>git commit -m <span class="hljs-string">&quot;说明&quot;</span><br></code></pre></td></tr></table></figure><hr><h3 id="第二阶段：远程仓库"><a href="#第二阶段：远程仓库" class="headerlink" title="第二阶段：远程仓库"></a>第二阶段：远程仓库</h3><p>重点掌握：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">git remote<br>git push<br>git pull<br>git <span class="hljs-built_in">clone</span><br></code></pre></td></tr></table></figure><hr><h3 id="第三阶段：分支管理"><a href="#第三阶段：分支管理" class="headerlink" title="第三阶段：分支管理"></a>第三阶段：分支管理</h3><p>重点掌握：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">git branch<br>git switch<br>git merge<br></code></pre></td></tr></table></figure><hr><h3 id="第四阶段：问题处理"><a href="#第四阶段：问题处理" class="headerlink" title="第四阶段：问题处理"></a>第四阶段：问题处理</h3><p>重点掌握：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">git restore<br>git reset<br>git stash<br>git reflog<br></code></pre></td></tr></table></figure><hr><h2 id="二十八、Git-日常开发流程"><a href="#二十八、Git-日常开发流程" class="headerlink" title="二十八、Git 日常开发流程"></a>二十八、Git 日常开发流程</h2><h3 id="个人项目常用流程"><a href="#个人项目常用流程" class="headerlink" title="个人项目常用流程"></a>个人项目常用流程</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">git status<br>git add .<br>git commit -m <span class="hljs-string">&quot;提交说明&quot;</span><br>git push<br></code></pre></td></tr></table></figure><hr><h3 id="团队项目常用流程"><a href="#团队项目常用流程" class="headerlink" title="团队项目常用流程"></a>团队项目常用流程</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">git pull<br>git switch -c feature-login<br><br><span class="hljs-comment"># 修改代码</span><br><br>git add .<br>git commit -m <span class="hljs-string">&quot;feat: 新增登录功能&quot;</span><br>git push -u origin feature-login<br></code></pre></td></tr></table></figure><p>然后在 GitHub &#x2F; GitLab &#x2F; Gitee 上创建 Pull Request 或 Merge Request。</p><hr><h2 id="二十九、重点记忆"><a href="#二十九、重点记忆" class="headerlink" title="二十九、重点记忆"></a>二十九、重点记忆</h2><p>Git 最核心的几个命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">git status<br>git add .<br>git commit -m <span class="hljs-string">&quot;提交说明&quot;</span><br>git push<br>git pull<br></code></pre></td></tr></table></figure><p>Git 最核心的流程：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">修改文件 -&gt; 添加到暂存区 -&gt; 提交到本地仓库 -&gt; 推送到远程仓库<br></code></pre></td></tr></table></figure><p>Git 最重要的思想：</p><blockquote><p>每一次 commit 都是一个可以回到的版本节点。</p></blockquote><hr><h2 id="三十、总结"><a href="#三十、总结" class="headerlink" title="三十、总结"></a>三十、总结</h2><p>Git 是开发中非常重要的工具。刚开始学习时，不需要一次性掌握所有命令，先熟悉最常用的流程即可。</p><p>日常开发最常用的命令是：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">git status<br>git add .<br>git commit -m <span class="hljs-string">&quot;提交说明&quot;</span><br>git pull<br>git push<br></code></pre></td></tr></table></figure><p>掌握这些命令后，再逐步学习分支、合并、冲突、回退和 stash，就可以应对大多数开发场景。</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs"><br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>http://zncddh.cn/2026/04/24/git%E5%AD%A6%E4%B9%A0%E8%BF%87%E7%A8%8B/</id>
    <link href="http://zncddh.cn/2026/04/24/git%E5%AD%A6%E4%B9%A0%E8%BF%87%E7%A8%8B/"/>
    <published>2026-04-24T00:37:35.000Z</published>
    <summary>
      <![CDATA[<figure class="highlight md"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span]]>
    </summary>
    <title>git学习过程</title>
    <updated>2026-04-24T10:52:46.432Z</updated>
  </entry>
  <entry>
    <author>
      <name>creativity</name>
    </author>
    <category term="总结" scheme="http://zncddh.cn/categories/%E6%80%BB%E7%BB%93/"/>
    <category term="Docker" scheme="http://zncddh.cn/tags/Docker/"/>
    <category term="Nginx" scheme="http://zncddh.cn/tags/Nginx/"/>
    <category term="Hexo" scheme="http://zncddh.cn/tags/Hexo/"/>
    <category term="WSL" scheme="http://zncddh.cn/tags/WSL/"/>
    <content>
      <![CDATA[<h1 id="Docker-Nginx-Hexo-最终速查版命令清单"><a href="#Docker-Nginx-Hexo-最终速查版命令清单" class="headerlink" title="Docker + Nginx + Hexo 最终速查版命令清单"></a>Docker + Nginx + Hexo 最终速查版命令清单</h1><h2 id="一、项目结构"><a href="#一、项目结构" class="headerlink" title="一、项目结构"></a>一、项目结构</h2><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs text">~/docker-learn/<br>├── hello-docker/      # Docker/Nginx 基础练习<br>├── my-site/           # 最早练习用的静态网页目录<br>├── nginx-conf/        # 最早练习用的 Nginx 配置<br>├── hexo-blog/         # Hexo 博客项目（开发 + 生产构建）<br>└── hexo-nginx/        # 挂载式 Nginx 发布（开发式发布）<br></code></pre></td></tr></table></figure><hr><h2 id="二、开发环境：Hexo-本地预览"><a href="#二、开发环境：Hexo-本地预览" class="headerlink" title="二、开发环境：Hexo 本地预览"></a>二、开发环境：Hexo 本地预览</h2><p>目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-blog<br></code></pre></td></tr></table></figure><p>启动开发环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose up -d<br></code></pre></td></tr></table></figure><p>查看状态：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose ps<br></code></pre></td></tr></table></figure><p>查看日志：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose logs --<span class="hljs-built_in">tail</span> 50<br></code></pre></td></tr></table></figure><p>进入运行中的 Hexo 容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose <span class="hljs-built_in">exec</span> hexo bash<br></code></pre></td></tr></table></figure><p>浏览器访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:4000<br></code></pre></td></tr></table></figure><p>停止开发环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose down<br></code></pre></td></tr></table></figure><hr><h2 id="三、Hexo-常用命令"><a href="#三、Hexo-常用命令" class="headerlink" title="三、Hexo 常用命令"></a>三、Hexo 常用命令</h2><h3 id="1-新建文章"><a href="#1-新建文章" class="headerlink" title="1. 新建文章"></a>1. 新建文章</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose <span class="hljs-built_in">exec</span> hexo hexo new post <span class="hljs-string">&quot;文章标题&quot;</span><br></code></pre></td></tr></table></figure><p>或者一次性容器方式：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose run --<span class="hljs-built_in">rm</span> hexo bash -lc <span class="hljs-string">&quot;hexo new post &#x27;文章标题&#x27;&quot;</span><br></code></pre></td></tr></table></figure><h3 id="2-重新生成静态文件"><a href="#2-重新生成静态文件" class="headerlink" title="2. 重新生成静态文件"></a>2. 重新生成静态文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose run --<span class="hljs-built_in">rm</span> hexo bash -lc <span class="hljs-string">&quot;hexo clean &amp;&amp; hexo generate&quot;</span><br></code></pre></td></tr></table></figure><h3 id="3-查看文章目录"><a href="#3-查看文章目录" class="headerlink" title="3. 查看文章目录"></a>3. 查看文章目录</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">ls</span> <span class="hljs-built_in">source</span>/_posts<br></code></pre></td></tr></table></figure><h3 id="4-查看生成结果"><a href="#4-查看生成结果" class="headerlink" title="4. 查看生成结果"></a>4. 查看生成结果</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">ls</span> public<br>find public -maxdepth 2 -<span class="hljs-built_in">type</span> f | <span class="hljs-built_in">head</span><br></code></pre></td></tr></table></figure><hr><h2 id="四、开发式发布：Nginx-挂载-public-目录"><a href="#四、开发式发布：Nginx-挂载-public-目录" class="headerlink" title="四、开发式发布：Nginx 挂载 public 目录"></a>四、开发式发布：Nginx 挂载 public 目录</h2><p>目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-nginx<br></code></pre></td></tr></table></figure><p>启动挂载式发布环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose up -d<br></code></pre></td></tr></table></figure><p>查看状态：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose ps<br></code></pre></td></tr></table></figure><p>查看日志：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose logs --<span class="hljs-built_in">tail</span> 50<br></code></pre></td></tr></table></figure><p>进入 Nginx 容器检查静态文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it hexo-nginx <span class="hljs-built_in">ls</span> -la /usr/share/nginx/html<br>docker <span class="hljs-built_in">exec</span> -it hexo-nginx <span class="hljs-built_in">ls</span> -la /usr/share/nginx/html/index.html<br></code></pre></td></tr></table></figure><p>浏览器访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8081<br></code></pre></td></tr></table></figure><p>停止挂载式发布环境：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose down<br></code></pre></td></tr></table></figure><hr><h2 id="五、生产环境：多阶段构建镜像"><a href="#五、生产环境：多阶段构建镜像" class="headerlink" title="五、生产环境：多阶段构建镜像"></a>五、生产环境：多阶段构建镜像</h2><p>目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-blog<br></code></pre></td></tr></table></figure><h3 id="1-手动构建生产镜像"><a href="#1-手动构建生产镜像" class="headerlink" title="1. 手动构建生产镜像"></a>1. 手动构建生产镜像</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker build -f Dockerfile.prod -t hexo-prod .<br></code></pre></td></tr></table></figure><p>查看镜像：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker images | grep hexo-prod<br></code></pre></td></tr></table></figure><h3 id="2-手动启动生产容器"><a href="#2-手动启动生产容器" class="headerlink" title="2. 手动启动生产容器"></a>2. 手动启动生产容器</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run --<span class="hljs-built_in">rm</span> -d -p 8082:80 --name hexo-prod-test hexo-prod<br></code></pre></td></tr></table></figure><p>查看运行状态：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker ps<br></code></pre></td></tr></table></figure><p>查看日志：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker logs --<span class="hljs-built_in">tail</span> 50 hexo-prod-test<br></code></pre></td></tr></table></figure><p>检查容器内静态文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it hexo-prod-test <span class="hljs-built_in">ls</span> -la /usr/share/nginx/html | <span class="hljs-built_in">head</span><br></code></pre></td></tr></table></figure><p>浏览器访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8082<br></code></pre></td></tr></table></figure><p>删除测试容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">rm</span> -f hexo-prod-test<br></code></pre></td></tr></table></figure><hr><h2 id="六、生产环境：Compose-管理"><a href="#六、生产环境：Compose-管理" class="headerlink" title="六、生产环境：Compose 管理"></a>六、生产环境：Compose 管理</h2><p>目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-blog<br></code></pre></td></tr></table></figure><h3 id="1-启动生产环境"><a href="#1-启动生产环境" class="headerlink" title="1. 启动生产环境"></a>1. 启动生产环境</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose -f docker-compose.prod.yml up -d --build<br></code></pre></td></tr></table></figure><h3 id="2-查看状态"><a href="#2-查看状态" class="headerlink" title="2. 查看状态"></a>2. 查看状态</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose -f docker-compose.prod.yml ps<br></code></pre></td></tr></table></figure><h3 id="3-查看日志"><a href="#3-查看日志" class="headerlink" title="3. 查看日志"></a>3. 查看日志</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose -f docker-compose.prod.yml logs --<span class="hljs-built_in">tail</span> 50<br></code></pre></td></tr></table></figure><h3 id="4-停止生产环境"><a href="#4-停止生产环境" class="headerlink" title="4. 停止生产环境"></a>4. 停止生产环境</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose -f docker-compose.prod.yml down<br></code></pre></td></tr></table></figure><h3 id="5-强制重建生产环境"><a href="#5-强制重建生产环境" class="headerlink" title="5. 强制重建生产环境"></a>5. 强制重建生产环境</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose -f docker-compose.prod.yml up -d --build --force-recreate<br></code></pre></td></tr></table></figure><p>浏览器访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8082<br></code></pre></td></tr></table></figure><hr><h2 id="七、日常完整工作流"><a href="#七、日常完整工作流" class="headerlink" title="七、日常完整工作流"></a>七、日常完整工作流</h2><h3 id="场景-1：写文章并本地预览"><a href="#场景-1：写文章并本地预览" class="headerlink" title="场景 1：写文章并本地预览"></a>场景 1：写文章并本地预览</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-blog<br>docker compose up -d<br></code></pre></td></tr></table></figure><p>访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:4000<br></code></pre></td></tr></table></figure><h3 id="场景-2：改完文章后生成静态文件"><a href="#场景-2：改完文章后生成静态文件" class="headerlink" title="场景 2：改完文章后生成静态文件"></a>场景 2：改完文章后生成静态文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-blog<br>docker compose run --<span class="hljs-built_in">rm</span> hexo bash -lc <span class="hljs-string">&quot;hexo clean &amp;&amp; hexo generate&quot;</span><br></code></pre></td></tr></table></figure><h3 id="场景-3：查看挂载式发布结果"><a href="#场景-3：查看挂载式发布结果" class="headerlink" title="场景 3：查看挂载式发布结果"></a>场景 3：查看挂载式发布结果</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-nginx<br>docker compose up -d<br></code></pre></td></tr></table></figure><p>访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8081<br></code></pre></td></tr></table></figure><h3 id="场景-4：更新生产环境"><a href="#场景-4：更新生产环境" class="headerlink" title="场景 4：更新生产环境"></a>场景 4：更新生产环境</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> ~/docker-learn/hexo-blog<br>docker compose -f docker-compose.prod.yml up -d --build<br></code></pre></td></tr></table></figure><p>访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8082<br></code></pre></td></tr></table></figure><hr><h2 id="八、最常用排错命令"><a href="#八、最常用排错命令" class="headerlink" title="八、最常用排错命令"></a>八、最常用排错命令</h2><h3 id="1-看容器是否在运行"><a href="#1-看容器是否在运行" class="headerlink" title="1. 看容器是否在运行"></a>1. 看容器是否在运行</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker ps<br>docker compose ps<br>docker compose -f docker-compose.prod.yml ps<br></code></pre></td></tr></table></figure><h3 id="2-看日志"><a href="#2-看日志" class="headerlink" title="2. 看日志"></a>2. 看日志</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker logs 容器名<br>docker compose logs --<span class="hljs-built_in">tail</span> 50<br>docker compose -f docker-compose.prod.yml logs --<span class="hljs-built_in">tail</span> 50<br></code></pre></td></tr></table></figure><h3 id="3-进入容器"><a href="#3-进入容器" class="headerlink" title="3. 进入容器"></a>3. 进入容器</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it 容器名 bash<br>docker compose <span class="hljs-built_in">exec</span> hexo bash<br></code></pre></td></tr></table></figure><h3 id="4-看端口占用"><a href="#4-看端口占用" class="headerlink" title="4. 看端口占用"></a>4. 看端口占用</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker ps<br></code></pre></td></tr></table></figure><p>重点看类似：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">0.0.0.0:4000-&gt;4000/tcp<br>0.0.0.0:8081-&gt;80/tcp<br>0.0.0.0:8082-&gt;80/tcp<br></code></pre></td></tr></table></figure><h3 id="5-如果报端口冲突"><a href="#5-如果报端口冲突" class="headerlink" title="5. 如果报端口冲突"></a>5. 如果报端口冲突</h3><p>删除旧容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">rm</span> -f 容器名<br></code></pre></td></tr></table></figure><h3 id="6-检查挂载目录是否正确"><a href="#6-检查挂载目录是否正确" class="headerlink" title="6. 检查挂载目录是否正确"></a>6. 检查挂载目录是否正确</h3><p>宿主机查看：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">ls</span> -la ~/docker-learn/hexo-blog/public<br><span class="hljs-built_in">ls</span> -la ~/docker-learn/hexo-blog/public/index.html<br></code></pre></td></tr></table></figure><p>容器里查看：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it hexo-nginx <span class="hljs-built_in">ls</span> -la /usr/share/nginx/html<br>docker <span class="hljs-built_in">exec</span> -it hexo-nginx <span class="hljs-built_in">ls</span> -la /usr/share/nginx/html/index.html<br></code></pre></td></tr></table></figure><h3 id="7-检查-Nginx-配置语法"><a href="#7-检查-Nginx-配置语法" class="headerlink" title="7. 检查 Nginx 配置语法"></a>7. 检查 Nginx 配置语法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it my-nginx nginx -t<br></code></pre></td></tr></table></figure><h3 id="8-重载-Nginx-配置"><a href="#8-重载-Nginx-配置" class="headerlink" title="8. 重载 Nginx 配置"></a>8. 重载 Nginx 配置</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it my-nginx nginx -s reload<br></code></pre></td></tr></table></figure><hr><h2 id="九、当前几个地址的意义"><a href="#九、当前几个地址的意义" class="headerlink" title="九、当前几个地址的意义"></a>九、当前几个地址的意义</h2><h3 id="开发预览"><a href="#开发预览" class="headerlink" title="开发预览"></a>开发预览</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:4000<br></code></pre></td></tr></table></figure><p>用途：</p><ul><li>写文章时本地预览</li><li>Hexo 开发环境</li></ul><h3 id="挂载式发布"><a href="#挂载式发布" class="headerlink" title="挂载式发布"></a>挂载式发布</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8081<br></code></pre></td></tr></table></figure><p>用途：</p><ul><li>Nginx 直接挂载 <code>public/</code></li><li>开发式发布验证</li></ul><h3 id="生产式发布"><a href="#生产式发布" class="headerlink" title="生产式发布"></a>生产式发布</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8082<br></code></pre></td></tr></table></figure><p>用途：</p><ul><li>多阶段构建后的生产镜像</li><li>更接近真实部署</li></ul><hr><h2 id="十、当前几个核心文件的作用"><a href="#十、当前几个核心文件的作用" class="headerlink" title="十、当前几个核心文件的作用"></a>十、当前几个核心文件的作用</h2><h3 id="hexo-blog-docker-compose-yml"><a href="#hexo-blog-docker-compose-yml" class="headerlink" title="hexo-blog&#x2F;docker-compose.yml"></a>hexo-blog&#x2F;docker-compose.yml</h3><p>开发环境 compose 文件</p><h3 id="hexo-blog-Dockerfile"><a href="#hexo-blog-Dockerfile" class="headerlink" title="hexo-blog&#x2F;Dockerfile"></a>hexo-blog&#x2F;Dockerfile</h3><p>开发镜像 Dockerfile（my-hexo）</p><h3 id="hexo-blog-Dockerfile-prod"><a href="#hexo-blog-Dockerfile-prod" class="headerlink" title="hexo-blog&#x2F;Dockerfile.prod"></a>hexo-blog&#x2F;Dockerfile.prod</h3><p>生产镜像多阶段构建文件</p><h3 id="hexo-blog-docker-compose-prod-yml"><a href="#hexo-blog-docker-compose-prod-yml" class="headerlink" title="hexo-blog&#x2F;docker-compose.prod.yml"></a>hexo-blog&#x2F;docker-compose.prod.yml</h3><p>生产环境 compose 文件</p><h3 id="hexo-nginx-docker-compose-yml"><a href="#hexo-nginx-docker-compose-yml" class="headerlink" title="hexo-nginx&#x2F;docker-compose.yml"></a>hexo-nginx&#x2F;docker-compose.yml</h3><p>挂载式 Nginx 发布配置</p><hr><h2 id="十一、几个关键概念一句话版"><a href="#十一、几个关键概念一句话版" class="headerlink" title="十一、几个关键概念一句话版"></a>十一、几个关键概念一句话版</h2><h3 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h3><p>负责管理环境、镜像、容器。</p><h3 id="Hexo"><a href="#Hexo" class="headerlink" title="Hexo"></a>Hexo</h3><p>负责把 Markdown 文章生成成静态网页。</p><h3 id="Nginx"><a href="#Nginx" class="headerlink" title="Nginx"></a>Nginx</h3><p>负责把静态网页提供给浏览器访问。</p><h3 id="bind-mount"><a href="#bind-mount" class="headerlink" title="bind mount"></a>bind mount</h3><p>把宿主机目录直接映射进容器。</p><h3 id="named-volume"><a href="#named-volume" class="headerlink" title="named volume"></a>named volume</h3><p>让 Docker 管理某个数据目录。</p><h3 id="Dockerfile"><a href="#Dockerfile" class="headerlink" title="Dockerfile"></a>Dockerfile</h3><p>定义“镜像怎么构建”。</p><h3 id="multi-stage-build"><a href="#multi-stage-build" class="headerlink" title="multi-stage build"></a>multi-stage build</h3><p>第一阶段构建，第二阶段运行，适合生产环境。</p><hr><h2 id="十二、一句话总总结"><a href="#十二、一句话总总结" class="headerlink" title="十二、一句话总总结"></a>十二、一句话总总结</h2><p><strong>Hexo 生成网页，Nginx 提供网页，Docker 管理运行环境。</strong></p>]]>
    </content>
    <id>http://zncddh.cn/2026/04/23/all/</id>
    <link href="http://zncddh.cn/2026/04/23/all/"/>
    <published>2026-04-23T03:33:45.000Z</published>
    <summary>
      <![CDATA[<h1 id="Docker-Nginx-Hexo-最终速查版命令清单"><a href="#Docker-Nginx-Hexo-最终速查版命令清单" class="headerlink" title="Docker + Nginx + Hexo]]>
    </summary>
    <title>总路线</title>
    <updated>2026-04-24T10:52:46.432Z</updated>
  </entry>
  <entry>
    <author>
      <name>creativity</name>
    </author>
    <category term="学习记录" scheme="http://zncddh.cn/categories/%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/"/>
    <category term="Docker" scheme="http://zncddh.cn/tags/Docker/"/>
    <category term="Nginx" scheme="http://zncddh.cn/tags/Nginx/"/>
    <category term="Hexo" scheme="http://zncddh.cn/tags/Hexo/"/>
    <category term="WSL" scheme="http://zncddh.cn/tags/WSL/"/>
    <content>
      <![CDATA[<h1 id="Docker、Nginx-与-Hexo-学习总结"><a href="#Docker、Nginx-与-Hexo-学习总结" class="headerlink" title="Docker、Nginx 与 Hexo 学习总结"></a>Docker、Nginx 与 Hexo 学习总结</h1><p>这篇文章记录了我从零开始学习 Docker、Nginx 和 Hexo 的过程。</p><h2 id="一、我先学会了-Docker-的基础概念"><a href="#一、我先学会了-Docker-的基础概念" class="headerlink" title="一、我先学会了 Docker 的基础概念"></a>一、我先学会了 Docker 的基础概念</h2><p>一开始，我先理解了 Docker 里最重要的两个概念：</p><ul><li>镜像（image）是模板</li><li>容器（container）是镜像运行出来的实例</li></ul><p>我练习了这些常用命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker images<br>docker ps<br>docker ps -a<br>docker run hello-world<br>docker run -it ubuntu bash<br>docker <span class="hljs-built_in">exec</span> -it my-ubuntu bash<br>docker stop my-ubuntu<br>docker <span class="hljs-built_in">rm</span> my-ubuntu<br></code></pre></td></tr></table></figure><p>通过这些练习，我搞明白了：</p><ul><li><code>docker ps</code> 看的是正在运行的容器</li><li><code>docker ps -a</code> 看的是所有容器</li><li>容器停止后不会自动消失</li><li>删除容器和停止容器不是一回事</li></ul><h2 id="二、我理解了容器的运行方式"><a href="#二、我理解了容器的运行方式" class="headerlink" title="二、我理解了容器的运行方式"></a>二、我理解了容器的运行方式</h2><p>我先运行了 <code>hello-world</code> 容器，确认 Docker 环境正常。</p><p>然后我又运行了 Ubuntu 容器，进入容器内部执行命令，确认容器里也有自己的文件系统和操作环境。</p><p>我学到了：</p><ul><li><code>docker run</code> 是新建并启动容器</li><li><code>docker exec</code> 是进入一个已经运行中的容器</li><li><code>exit</code> 在不同场景下效果不同</li></ul><p>例如：</p><ul><li>如果是 <code>docker run -it ubuntu bash</code> 进入的，退出后容器通常就停止</li><li>如果是 <code>docker exec -it my-ubuntu bash</code> 进入的，退出后后台容器仍然继续运行</li></ul><h2 id="三、我学会了端口映射"><a href="#三、我学会了端口映射" class="headerlink" title="三、我学会了端口映射"></a>三、我学会了端口映射</h2><p>接着我运行了一个 Nginx 容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run -d --name my-nginx -p 8080:80 nginx<br></code></pre></td></tr></table></figure><p>这里最关键的是：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">-p 8080:80<br></code></pre></td></tr></table></figure><p>它表示：</p><ul><li>宿主机的 8080 端口</li><li>映射到容器里的 80 端口</li></ul><p>这样我就在浏览器里通过 <code>http://localhost:8080</code> 访问到了 Nginx 欢迎页。</p><p>这一步让我真正理解了 Web 服务在 Docker 里是怎么暴露给外部访问的。</p><h2 id="四、我学会了-Nginx-提供静态页面"><a href="#四、我学会了-Nginx-提供静态页面" class="headerlink" title="四、我学会了 Nginx 提供静态页面"></a>四、我学会了 Nginx 提供静态页面</h2><p>进入 Nginx 容器后，我找到了默认网页目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">/usr/share/nginx/html<br></code></pre></td></tr></table></figure><p>我还看到了默认首页文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">/usr/share/nginx/html/index.html<br></code></pre></td></tr></table></figure><p>然后我直接修改了这个首页文件，刷新浏览器后，页面内容立刻发生变化。</p><p>这让我明白：</p><p><strong>Nginx 的核心作用，就是把目录里的文件返回给浏览器。</strong></p><h2 id="五、我学会了挂载目录"><a href="#五、我学会了挂载目录" class="headerlink" title="五、我学会了挂载目录"></a>五、我学会了挂载目录</h2><p>接下来我没有继续在容器里手动改文件，而是改成在 WSL 里创建网站目录，再挂载给 Nginx。</p><p>例如：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">-v ~/docker-learn/my-site:/usr/share/nginx/html:ro<br></code></pre></td></tr></table></figure><p>这表示：</p><ul><li>左边是 WSL 里的目录</li><li>右边是容器里的目录</li><li><code>:ro</code> 表示只读挂载</li></ul><p>这样做之后，我在 WSL 里改 <code>index.html</code>，浏览器里的页面也会立刻更新。</p><p>这一点非常重要，因为后面博客、配置文件、项目目录，都会用这种方式管理。</p><h2 id="六、我学会了挂载-Nginx-配置文件"><a href="#六、我学会了挂载-Nginx-配置文件" class="headerlink" title="六、我学会了挂载 Nginx 配置文件"></a>六、我学会了挂载 Nginx 配置文件</h2><p>除了挂载网页目录，我还学会了挂载配置文件。</p><p>例如把 WSL 里的 <code>default.conf</code> 挂载到：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">/etc/nginx/conf.d/default.conf<br></code></pre></td></tr></table></figure><p>这样我就可以在宿主机直接修改 Nginx 配置，而不是每次进容器手改。</p><p>我还写了一个最基础的配置：</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">server_name</span> localhost;<br><br>    <span class="hljs-attribute">root</span> /usr/share/nginx/html;<br>    <span class="hljs-attribute">index</span> index.html;<br><br>    <span class="hljs-section">location</span> / &#123;<br>        <span class="hljs-attribute">try_files</span> <span class="hljs-variable">$uri</span> <span class="hljs-variable">$uri</span>/ =<span class="hljs-number">404</span>;<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>通过这个配置，我理解了几个很重要的概念：</p><ul><li><code>listen</code>：监听哪个端口</li><li><code>root</code>：网站根目录</li><li><code>index</code>：默认首页文件</li><li><code>location</code>：请求路径如何处理</li></ul><h2 id="七、我学会了看日志和检查配置"><a href="#七、我学会了看日志和检查配置" class="headerlink" title="七、我学会了看日志和检查配置"></a>七、我学会了看日志和检查配置</h2><p>为了更像真实环境，我还练习了这些命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker logs my-nginx<br>docker <span class="hljs-built_in">exec</span> -it my-nginx nginx -t<br>docker <span class="hljs-built_in">exec</span> -it my-nginx nginx -s reload<br></code></pre></td></tr></table></figure><p>这几步让我明白：</p><ul><li>网页打不开时，要先看日志</li><li>改配置后，先用 <code>nginx -t</code> 检查语法</li><li>配置没问题后，再用 <code>nginx -s reload</code> 重载服务</li></ul><p>我还配置了一个 <code>/test</code> 路径：</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">location</span> /test &#123;<br>    <span class="hljs-attribute">return</span> <span class="hljs-number">200</span> <span class="hljs-string">&#x27;hello from /test&#x27;</span>;<br>    <span class="hljs-attribute">add_header</span> Content-Type text/plain;<br>&#125;<br></code></pre></td></tr></table></figure><p>然后成功访问了：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:8080/test<br></code></pre></td></tr></table></figure><p>这让我理解了 Nginx 的路由配置是怎么生效的。</p><h2 id="八、我学会了使用-Docker-Compose"><a href="#八、我学会了使用-Docker-Compose" class="headerlink" title="八、我学会了使用 Docker Compose"></a>八、我学会了使用 Docker Compose</h2><p>手敲 <code>docker run</code> 很方便学习，但实际项目更适合用 <code>docker-compose.yml</code> 管理。</p><p>我后面把 Nginx 服务改成了 Compose 方式启动，例如：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">services:</span><br>  <span class="hljs-attr">nginx:</span><br>    <span class="hljs-attr">image:</span> <span class="hljs-string">nginx</span><br>    <span class="hljs-attr">container_name:</span> <span class="hljs-string">my-nginx</span><br>    <span class="hljs-attr">ports:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;8080:80&quot;</span><br>    <span class="hljs-attr">volumes:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/yah/docker-learn/my-site:/usr/share/nginx/html:ro</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-string">/home/yah/docker-learn/nginx-conf/default.conf:/etc/nginx/conf.d/default.conf:ro</span><br></code></pre></td></tr></table></figure><p>然后我学会了：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker compose up -d<br>docker compose ps<br>docker compose logs<br>docker compose down<br></code></pre></td></tr></table></figure><p>这让我理解了：</p><ul><li>Compose 可以把复杂命令写进配置文件</li><li>更适合管理完整项目</li><li>后面多服务协作时会非常方便</li></ul><h2 id="九、我开始学习-Hexo"><a href="#九、我开始学习-Hexo" class="headerlink" title="九、我开始学习 Hexo"></a>九、我开始学习 Hexo</h2><p>在学完 Docker 和 Nginx 基础后，我开始引入 Hexo。</p><p>我先用 Node 容器初始化了 Hexo 项目，在容器里执行了：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm install -g hexo-cli<br>hexo init .<br>npm install<br></code></pre></td></tr></table></figure><p>初始化后，我看到了这些目录和文件：</p><ul><li><code>_config.yml</code></li><li><code>source/</code></li><li><code>themes/</code></li><li><code>scaffolds/</code></li><li><code>package.json</code></li></ul><p>这一步让我明白：</p><p><strong>Hexo 本质上是一个静态博客生成器。</strong></p><h2 id="十、我理解了-Hexo-的-public-目录"><a href="#十、我理解了-Hexo-的-public-目录" class="headerlink" title="十、我理解了 Hexo 的 public 目录"></a>十、我理解了 Hexo 的 public 目录</h2><p>接着我执行了：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">hexo clean<br>hexo generate<br></code></pre></td></tr></table></figure><p>生成之后，我看到了 <code>public/</code> 目录，里面有：</p><ul><li><code>index.html</code></li><li><code>archives/</code></li><li><code>css/</code></li><li><code>js/</code></li></ul><p>这让我理解了：</p><ul><li><code>source/</code> 是博客源内容</li><li><code>public/</code> 是生成出来的网站成品</li></ul><p>也就是说，Hexo 并不是必须长期在线运行，它最重要的作用其实是：</p><p><strong>把博客内容生成成静态网页文件。</strong></p><h2 id="十一、我学会了用-Docker-跑-Hexo-预览"><a href="#十一、我学会了用-Docker-跑-Hexo-预览" class="headerlink" title="十一、我学会了用 Docker 跑 Hexo 预览"></a>十一、我学会了用 Docker 跑 Hexo 预览</h2><p>为了能在浏览器里看博客，我又用 Docker 跑了 Hexo 预览服务，并且做了端口映射：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker run --<span class="hljs-built_in">rm</span> -it \<br>  -p 4000:4000 \<br>  -v $(<span class="hljs-built_in">pwd</span>):/app \<br>  -w /app \<br>  node:20-bullseye \<br>  bash<br></code></pre></td></tr></table></figure><p>然后在容器里执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">npx hexo server --host 0.0.0.0<br></code></pre></td></tr></table></figure><p>这样我就可以在浏览器访问：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">http://localhost:4000<br></code></pre></td></tr></table></figure><p>这一步让我明白：</p><ul><li>Hexo 可以作为开发预览服务来用</li><li>容器里跑的服务，要记得映射端口</li><li><code>--host 0.0.0.0</code> 很重要，否则外部访问不到</li></ul><h2 id="十二、我把-Hexo-和-Nginx-串起来了"><a href="#十二、我把-Hexo-和-Nginx-串起来了" class="headerlink" title="十二、我把 Hexo 和 Nginx 串起来了"></a>十二、我把 Hexo 和 Nginx 串起来了</h2><p>最后，我学会了把 Hexo 和 Nginx 结合起来：</p><ul><li>Hexo 负责生成 <code>public/</code></li><li>Nginx 负责托管 <code>public/</code></li></ul><p>我写了一个新的 <code>docker-compose.yml</code>，让 Nginx 直接挂载：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">/home/yah/docker-learn/hexo-blog/public<br></code></pre></td></tr></table></figure><p>然后通过 Nginx 发布 Hexo 生成的博客页面。</p><p>这让我真正理解了静态博客的典型部署思路：</p><ol><li>写文章</li><li>Hexo 生成静态文件</li><li>Nginx 托管静态文件</li><li>浏览器访问网站</li></ol><h2 id="十三、这次学习我最大的收获"><a href="#十三、这次学习我最大的收获" class="headerlink" title="十三、这次学习我最大的收获"></a>十三、这次学习我最大的收获</h2><p>通过这次从零实践，我不只是搭了一个博客，更重要的是建立了下面这套完整理解：</p><ul><li>Docker 解决环境运行问题</li><li>Nginx 解决网页访问问题</li><li>Hexo 解决静态博客生成问题</li></ul><p>它们三者的关系可以总结成一句话：</p><p><strong>Hexo 生成网页，Nginx 提供网页，Docker 管理运行环境。</strong></p><h2 id="十四、下一步计划"><a href="#十四、下一步计划" class="headerlink" title="十四、下一步计划"></a>十四、下一步计划</h2><p>接下来我准备继续学习这些内容：</p><ul><li>Hexo 主题配置</li><li>标签、分类、归档页面</li><li>Dockerfile 的写法</li><li>Compose 管多个服务</li><li>Nginx 更复杂的配置</li><li>把博客真正部署到服务器</li></ul><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>这次学习路线让我第一次把 Docker、Nginx 和静态博客真正串起来。</p><p>以前这些概念看起来很散，但实际做完以后就清楚了：</p><ul><li>Docker 不是只会背命令</li><li>Nginx 不是只会装和开</li><li>Hexo 也不只是写文章工具</li></ul><p>它们组合起来，正好构成了一套很典型的现代开发和部署练习项目。</p><p>补充一句：这是生产镜像更新测试。</p>]]>
    </content>
    <id>http://zncddh.cn/2026/04/20/my-second-post/</id>
    <link href="http://zncddh.cn/2026/04/20/my-second-post/"/>
    <published>2026-04-20T07:00:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="Docker、Nginx-与-Hexo-学习总结"><a href="#Docker、Nginx-与-Hexo-学习总结" class="headerlink" title="Docker、Nginx 与 Hexo 学习总结"></a>Docker、Nginx]]>
    </summary>
    <title>Docker、Nginx 与 Hexo 学习总结</title>
    <updated>2026-04-24T10:52:46.432Z</updated>
  </entry>
</feed>
