<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>开发规范 on Jiangwan&#39;s Blog</title>
        <link>https://jiangwan.ink/categories/%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83/</link>
        <description>Recent content in 开发规范 on Jiangwan&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sat, 21 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jiangwan.ink/categories/%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Git Commit 规范与最佳实践：为什么我们需要约定式提交</title>
        <link>https://jiangwan.ink/p/git-commit-convention-best-practices/</link>
        <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://jiangwan.ink/p/git-commit-convention-best-practices/</guid>
        <description>&lt;p&gt;在个人项目的早期阶段，我们往往习惯于随意地提交代码：&lt;code&gt;update&lt;/code&gt;、&lt;code&gt;fix bug&lt;/code&gt;，甚至是一个单独的 &lt;code&gt;.&lt;/code&gt;。然而，当项目周期拉长，或者开始与他人协作、参与开源社区时，这种随意的习惯会迅速带来灾难——在排查历史 Bug 或进行代码回滚时，杂乱无章的 &lt;code&gt;git log&lt;/code&gt; 犹如大海捞针。&lt;/p&gt;
&lt;p&gt;建立 Git Commit 规范，不仅是为了让提交历史看起来整洁，更是为了降低沟通成本、实现自动化（如自动生成 Changelog），以及方便未来的自己进行“代码考古”。&lt;/p&gt;
&lt;p&gt;目前开源社区中最为主流的标准是&lt;strong&gt;约定式提交（Conventional Commits）&lt;/strong&gt;。本文将对其核心规则与日常最佳实践进行梳理。&lt;/p&gt;
&lt;h2 id=&#34;一核心规则约定式提交拆解&#34;&gt;一、核心规则：约定式提交拆解
&lt;/h2&gt;&lt;p&gt;约定式提交要求每次提交信息必须符合固定的结构：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;type&amp;gt;[optional scope]: &amp;lt;description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[optional body]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[optional footer(s)]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在日常开发中，我们最常用的是第一行（Header）。它由三个部分组成：&lt;/p&gt;
&lt;h3 id=&#34;1-type提交类型&#34;&gt;1. Type（提交类型）
&lt;/h3&gt;&lt;p&gt;Type 用于明确指出这次提交的性质。严谨界定 Type 是规范的核心，以下是常用的类型及其边界：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;feat&lt;/strong&gt;: 新增功能（Feature）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix&lt;/strong&gt;: 修复 Bug。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docs&lt;/strong&gt;: 仅包含文档的修改（如 README、接口注释）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;style&lt;/strong&gt;: 代码格式变动（不影响代码逻辑，如空格、缩进、去除多余空行等）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;refactor&lt;/strong&gt;: 代码重构（注意边界：既不是新增功能，也不是修复 Bug 的代码变动）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;perf&lt;/strong&gt;: 优化性能的代码修改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;test&lt;/strong&gt;: 添加缺失的测试或更正现有测试。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chore&lt;/strong&gt;: 构建过程、辅助工具或依赖库的变动（如更新 npm 包、修改 webpack 配置）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-scope作用域&#34;&gt;2. Scope（作用域）
&lt;/h3&gt;&lt;p&gt;Scope 用于说明 commit 影响的范围，比如 &lt;code&gt;auth&lt;/code&gt;、&lt;code&gt;router&lt;/code&gt;、&lt;code&gt;db&lt;/code&gt; 等。它可以帮助团队成员快速定位改动发生的模块。例如：
&lt;code&gt;feat(auth): 新增 JWT 登录支持。&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-description描述&#34;&gt;3. Description（描述）
&lt;/h3&gt;&lt;p&gt;简短地描述改动内容。几个书写建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;动宾结构&lt;/strong&gt;：以动词开头，如“新增 xxx”、“修复 xxx”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精简准确&lt;/strong&gt;：不要超过 50 个字符，说清楚“做了什么”即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二最佳实践commit-的颗粒度与习惯&#34;&gt;二、最佳实践：Commit 的颗粒度与习惯
&lt;/h2&gt;&lt;p&gt;仅仅记住格式是不够的，规范的落地还需要良好的工程习惯支撑。&lt;/p&gt;
&lt;h3 id=&#34;1-控制合理的提交颗粒度&#34;&gt;1. 控制合理的提交颗粒度
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;一个 Commit 应该只包含一个逻辑上的改动。&lt;/strong&gt; 这是新手最容易踩的坑。如果在开发新功能时顺手修复了一个历史 Bug，或者格式化了整个文件，请务必将它们拆分为多个独立的 Commit（例如一个 &lt;code&gt;feat&lt;/code&gt;，一个 &lt;code&gt;fix&lt;/code&gt;，一个 &lt;code&gt;style&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;过大的、揉捏了各种变动的 Commit 会让代码审查（Code Review）变得异常困难，一旦新功能引发线上故障，想要单纯回滚那个附带的 Bug 修复几乎不可能。&lt;/p&gt;
&lt;h3 id=&#34;2-关联-issue-或任务流&#34;&gt;2. 关联 Issue 或任务流
&lt;/h3&gt;&lt;p&gt;如果是为了解决某个特定的 Issue 或需求，应该在提交信息中（通常在 Footer 部分，或者直接在 Description 末尾）附带 Issue 编号。例如：
&lt;code&gt;fix(user): 修复并发注册时的锁问题 (#123)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;主流的托管平台（如 GitHub、GitLab）会自动将这个 Commit 与对应的 Issue 关联并闭环。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
