<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Git on 张天赐的小世界</title>
    <link>https://www.zhangtianci.cn/tags/git/</link>
    <description>Recent content in Git on 张天赐的小世界</description>
    <generator>Hugo -- 0.155.3</generator>
    <language>zh-cn</language>
    <copyright>本博客的作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可</copyright>
    <lastBuildDate>Sun, 26 Apr 2026 16:11:00 +0800</lastBuildDate>
    <atom:link href="https://www.zhangtianci.cn/tags/git/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Commit Message 规范</title>
      <link>https://www.zhangtianci.cn/posts/commit-message-%E8%A7%84%E8%8C%83/</link>
      <pubDate>Sat, 03 Oct 2020 11:14:00 +0800</pubDate>
      <guid>https://www.zhangtianci.cn/posts/commit-message-%E8%A7%84%E8%8C%83/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;Git 提交记录写的足够清晰，可以让人们清晰地看到你所更改的内容。&lt;/p&gt;
&lt;p&gt;它是个很重要的东西，规范的提交记录可以让人们快速了解项目最近的改动。&lt;/p&gt;
&lt;p&gt;下面介绍一下我个人使用的规范。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="前言">前言</h1>
<p>Git 提交记录写的足够清晰，可以让人们清晰地看到你所更改的内容。</p>
<p>它是个很重要的东西，规范的提交记录可以让人们快速了解项目最近的改动。</p>
<p>下面介绍一下我个人使用的规范。</p>
<h1 id="格式">格式</h1>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;type&gt;(&lt;scope&gt;): &lt;subject&gt;
</span></span><span class="line"><span class="cl">&lt;空行&gt;
</span></span><span class="line"><span class="cl">&lt;body&gt;
</span></span><span class="line"><span class="cl">&lt;空行&gt;
</span></span><span class="line"><span class="cl">&lt;footer&gt;
</span></span></code></pre></div><p>其中，<code>&lt;type&gt;(&lt;scope&gt;): &lt;subject&gt;</code> 为必填内容，其他为选填。</p>
<h2 id="type">type</h2>
<p>表示本次的提交更改类型，有以下几个可选内容：</p>
<ol>
<li>feat: 新增新功能；</li>
<li>fix: 修复问题；</li>
<li>docs: 只修改了文档；</li>
<li>style: 不影响代码含义的更改（空白，格式，缺少分号等）；</li>
<li>refactor: 既不修复 bug 也不添加功能的代码更改（重构）；</li>
<li>perf: 改进性能的代码更改；</li>
<li>test: 添加缺失的测试或纠正现有测试；</li>
<li>build: 影响构建系统或外部依赖的变化；</li>
<li>ci: 修改 Cl 配置文件和脚本；</li>
<li>chore: 其他不修改代码或测试文件的更改；</li>
<li>revert: 恢复一个以前的提交；</li>
</ol>
<h2 id="scope">scope</h2>
<p>表示本次变更影响的范围。</p>
<p>如果描述不出范围可以用 <code>*</code> 表示。</p>
<h2 id="subject">subject</h2>
<p>简短描述本次提交的内容，不带句号。</p>
<p>如果是一次 revert 提交，则 subject 要和 revert 的 Header 内容一致。</p>
<h2 id="body">body</h2>
<p>详细描述本次提交的内容。包括为什么修改以及和以前的对比。</p>
<p>如果是一次 revert 提交，则写：<code>回滚 &lt;hash&gt;。</code> <code>&lt;hash&gt;</code> 是被恢复提交的 SHA。</p>
<h2 id="footer">footer</h2>
<p>分为两种情况。</p>
<p>如果当前代码与上一个版本不兼容，则 footer 部分以 <code>BREAKING CHANGE</code> 开头，后面是对变动的描述、以及变动理由和迁移方法。</p>
<p>如果当前 commit 针对某些 issue，那么可以在 footer 部分关闭这些 issue 。</p>
<h1 id="举例">举例</h1>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-mysql" data-lang="mysql"><span class="line"><span class="cl"><span class="nf">feat</span><span class="p">(</span><span class="err">$</span><span class="n">compile</span><span class="p">):</span><span class="w"> </span><span class="n">simplify</span><span class="w"> </span><span class="n">isolate</span><span class="w"> </span><span class="n">scope</span><span class="w"> </span><span class="n">bindings</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">Changed</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">isolate</span><span class="w"> </span><span class="n">scope</span><span class="w"> </span><span class="n">binding</span><span class="w"> </span><span class="n">options</span><span class="w"> </span><span class="k">to</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">-</span><span class="w"> </span><span class="o">@</span><span class="n">attr</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">attribute</span><span class="w"> </span><span class="nf">binding</span><span class="w"> </span><span class="p">(</span><span class="n">including</span><span class="w"> </span><span class="n">interpolation</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">-</span><span class="w"> </span><span class="o">=</span><span class="n">model</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="k">by</span><span class="o">-</span><span class="n">directional</span><span class="w"> </span><span class="n">model</span><span class="w"> </span><span class="n">binding</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">-</span><span class="w"> </span><span class="o">&amp;</span><span class="n">expr</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">expression</span><span class="w"> </span><span class="n">execution</span><span class="w"> </span><span class="n">binding</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">This</span><span class="w"> </span><span class="k">change</span><span class="w"> </span><span class="n">simplifies</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">terminology</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">well</span><span class="w"> </span><span class="k">as</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">number</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">choices</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">developer</span><span class="p">.</span><span class="w"> </span><span class="n">It</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">also</span><span class="w"> </span><span class="n">supports</span><span class="w"> </span><span class="n">local</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="n">aliasing</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">parent</span><span class="p">.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">BREAKING</span><span class="w"> </span><span class="k">CHANGE</span><span class="p">:</span><span class="w"> </span><span class="n">isolate</span><span class="w"> </span><span class="n">scope</span><span class="w"> </span><span class="n">bindings</span><span class="w"> </span><span class="n">definition</span><span class="w"> </span><span class="n">has</span><span class="w"> </span><span class="n">changed</span><span class="w"> </span><span class="k">and</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">the</span><span class="w"> </span><span class="n">inject</span><span class="w"> </span><span class="k">option</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">directive</span><span class="w"> </span><span class="n">controller</span><span class="w"> </span><span class="n">injection</span><span class="w"> </span><span class="n">was</span><span class="w"> </span><span class="n">removed</span><span class="p">.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">To</span><span class="w"> </span><span class="n">migrate</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">code</span><span class="w"> </span><span class="n">follow</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">example</span><span class="w"> </span><span class="n">below</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">Before</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">scope</span><span class="p">:</span><span class="w"> </span><span class="err">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myAttr</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;attribute&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myBind</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;bind&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myExpression</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;expression&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myEval</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;evaluate&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myAccessor</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;accessor&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="err">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">After</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">scope</span><span class="p">:</span><span class="w"> </span><span class="err">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myAttr</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;@&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myBind</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;@&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myExpression</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&amp;&#39;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">//</span><span class="w"> </span><span class="n">myEval</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">usually</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">useful</span><span class="p">,</span><span class="w"> </span><span class="n">but</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">cases</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">expression</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">assignable</span><span class="p">,</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="k">use</span><span class="w"> </span><span class="s1">&#39;=&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="n">myAccessor</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;=&#39;</span><span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">directive</span><span class="s1">&#39;s template change myAccessor() to myAccessor
</span></span></span><span class="line"><span class="cl"><span class="s1">}
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">The removed `inject` wasn&#39;</span><span class="n">t</span><span class="w"> </span><span class="n">generaly</span><span class="w"> </span><span class="n">useful</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">directives</span><span class="w"> </span><span class="n">so</span><span class="w"> </span><span class="n">there</span><span class="w"> </span><span class="n">should</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">code</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">it</span><span class="p">.</span><span class="w">
</span></span></span></code></pre></div><h1 id="最后">最后</h1>
<p>规范并非一成不变，最终目的就是生成简单明了的提交记录，让他人快速了解最近的项目变更内容。</p>
<p>我的规范仅供参考。每家大公司也有自己的规范，如 gitemoji 使用 emoji 表示提交内容等，各有各的优势，很有趣。我们可以取长补短，整理出自己认为最舒服的一套规范，一直遵守下去即可。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
