git提交信息也能自动格式化了?committier快速体验

git提交信息也能自动格式化了?committier快速体验

作为开发者,你是不是也有过这些提交代码的烦恼:手动写的Git提交信息格式混乱,团队协作时难以追溯变更;牢记Conventional Commits规范却总在细节上出错;用commitlint校验出问题还要手动修改提交消息;想要添加emoji却发现cz太难配合commitlint了?

最近发现了一款宝藏工具committier,它能直接实现Git提交信息的自动格式化,无需配置就能贴合规范。今天就带大家5分钟快速体验这款工具,彻底告别提交信息的"格式焦虑"。

Github仓库

文档主页

一、committier是什么?

committier是一款专注于Git提交消息"格式化与修复"的工具,和commitlint的"规则校验"定位不同,它更像提交消息领域的Prettier------不强制约束规则,而是自动优化格式、补充关键信息。

它默认遵循Conventional Commits规范,能智能推断提交类型、作用域,还能自动添加emoji,同时可以和commitlint无缝兼容,形成"格式化+校验"的完整链路,兼顾效率与规范。

据说AI生成提交信息的功能正在开发中,能利用Github Models免费使用,也能接入其他各家AI。

快速安装

committier支持多种安装方式,这里推荐项目级局部安装,适配团队协作场景,步骤超简单:

  1. 进入项目根目录,安装开发依赖
bash 复制代码
# 按需选择包管理器,这里以pnpm为例
pnpm add committier -D
  1. (可选)配置快捷脚本 在package.json中添加提交快捷命令,后续可一键启动交互式提交:
json 复制代码
{
  "scripts": {
    "commit": "committier commit"
  }
}

如果只是想临时体验,甚至不用安装,直接通过npx调用:

bash 复制代码
npx committier <指令>

核心功能快速体验

体验1:提交时自动格式化

这是committier的核心能力,要实现"提交即格式化",需借助husky配置Git钩子,步骤如下:

  1. 安装husky并初始化
bash 复制代码
pnpm add husky -D
pnpm husky init
  1. 配置commit-msg钩子 编辑项目根目录的.husky/commit-msg文件,添加committier的格式化指令(若有commitlint,需放在其前面):
bash 复制代码
npx --no -- committier edit $1
# 若有commitlint,保留下方指令,无则可省略
# npx --no -- commitlint --edit $1

配置完成后,咱们来实测效果: 执行常规的提交命令,故意写一个不规范的提交消息:

bash 复制代码
git add .
git commit -m "   FeAT add user login button"

原本松散的消息,会被committier自动格式化为:

bash 复制代码
✨ feat: add user login button

不仅补全了规范格式,还自动加上了功能类型对应的emoji,效果立竿见影!

体验2:交互式提交CLI

如果不想手动写提交消息,committier内置的交互式CLI能帮你"傻瓜式"生成规范消息,直接执行咱们之前配置的脚本:

bash 复制代码
pnpm commit

随后会进入问答式流程,只需按提示选择提交类型、填写变更描述,工具就会自动生成符合规范的提交消息:

若想测试流程不实际提交代码,可开启dry-run模式:

bash 复制代码
pnpm commit --dry-run

体验3:完美配合commitlint

如果你的项目已接入commitlint,只需额外配置一个emoji解析器,就能让两者完美兼容:

  1. commitlint.config.js中引入committier的解析器:
javascript 复制代码
import { commitlintEmojiParser } from "committier/commitlint-emoji-parser";
export default {
  extends: ["@commitlint/config-conventional"],
  parserPreset: commitlintEmojiParser,
};
  1. 确保钩子执行顺序为committier在前、commitlint在后,即可先格式化再校验,既保格式又守规则。

深度解析:committier的格式化核心能力

committier的格式化并非简单的"补个符号",而是围绕Conventional Commits规范的全维度自动优化,覆盖提交消息的各个组成部分,且全程无需手动干预。

1. 基础格式自动规整:从"杂乱"到"标准"

committier会自动将任意松散的提交消息,规整为[emoji] type(scope)!: description的标准格式,核心处理包括:

  • 符号与空格标准化:自动补全类型(type)与描述(description)之间的冒号+空格,清理多余的换行、空格;
  • 大小写与标点优化:默认将描述首字母转为小写(符合Conventional Commits规范),自动移除描述末尾的多余标点;
  • 破坏性变更标记处理:若提交消息中包含"BREAKING CHANGE"或手动标注"!",会自动将"!"放在type/scope后,符合规范要求。

示例对比: 手动提交的不规范消息:

bash 复制代码
git commit -m "FEAT  add user login function!!  "

经committier格式化后:

bash 复制代码
✨ feat: add user login function

若包含破坏性变更: 手动提交:git commit -m "fix auth BREAKING CHANGE: token验证逻辑修改" 格式化后:🐛 fix(auth)!: token验证逻辑修改

2. 智能信息补全:无需手动指定type/scope

committier能基于代码变更内容或项目结构,自动推断关键信息,进一步降低手动编写成本:

  • 提交类型(type)自动推断:若未指定type,工具会根据变更文件类型/内容(如新增文件→feat、修复bug→fix、配置变更→chore)自动匹配默认type;
  • 作用域(scope)自动提取 :开启autoScope配置后,可从monorepo工作区包名(如packages/button→button)、变更文件所属目录(如src/components/table→table)自动提取scope;
  • 空值自动补全:若提交消息仅写了核心描述(如"修改登录逻辑"),会自动补全默认type(如fix),避免消息缺失关键维度。

示例 : 开启autoScope: "replaceToPackageName"后,在monorepo的packages/button目录提交:

bash 复制代码
git commit -m "优化按钮样式"

格式化后:

bash 复制代码
🐛 fix(button): 优化按钮样式

3. 正文与脚注格式化:保持结构整洁

除了提交标题(subject),committier还会优化提交消息的正文(body)和脚注(footer):

  • 自动为正文/脚注补充空行分隔,符合"标题空一行+正文+空一行+脚注"的规范结构;
  • 清理正文/脚注中的多余缩进、重复换行;
  • 保留脚注中的关键标记(如Closes #123BREAKING CHANGE:),确保关联issue、变更说明不丢失。

自定义配置

如果默认的emoji或提交类型不符合团队习惯,可快速修改配置。在项目根目录新建committier.config.js,示例如下:

javascript 复制代码
import { defineConfig } from "committier";

export default defineConfig({
  // 关闭自动emoji(默认开启)
  autoEmoji: false,
  // 自动从工作区包名推断作用域
  autoScope: "replaceToPackageName",
  // 修改默认提交类型为feat
  defaultType: "feat"
  // 开启自动生成默认描述信息来兜底
  defaultDescription: true
});

committier支持多种格式的配置文件,哪怕只改个别字段,也能轻松覆盖默认行为。

体验总结

committier最打动我的点,在于零配置起步+无感格式化 5分钟就能完成接入,提交代码时无需额外操作,就能自动生成规范的提交消息,既降低了团队规范落地的门槛,又节省了手动调整格式的时间。

不管是个人小项目还是多人协作的大型项目,这款工具都能显著提升提交信息的质量和开发效率,还没试过的朋友不妨赶紧体验一波!

相关推荐
AllinLin18 小时前
JS中的call apply bind全面解析
前端·javascript·vue.js
阿乐去买菜18 小时前
2025 年末 TypeScript 趋势洞察:AI Agent 与 TS 7.0 的原生化革命
前端
POLITE318 小时前
Leetcode 438. 找到字符串中所有字母异位词 JavaScript (Day 4)
javascript·算法·leetcode
创思通信18 小时前
STM32F103C8T6采 DS18B20,通过A7680C 4G模块不断发送短信到手机
javascript·stm32·智能手机
海绵宝龙18 小时前
Vue 中的 Diff 算法
前端·vue.js·算法
zhougl99618 小时前
vue中App.vue和index.html冲突问题
javascript·vue.js·html
止观止18 小时前
告别全局污染:深入理解 ES Modules 模块化与构建工具
javascript·webpack·vite·前端工程化·es modules
浩泽学编程18 小时前
内网开发?系统环境变量无权限配置?快速解决使用其他版本node.js
前端·vue.js·vscode·node.js·js
狗哥哥18 小时前
Vue 3 插件系统重构实战:从过度设计到精简高效
前端·vue.js·架构
巾帼前端18 小时前
前端对用户因果链的优化
前端·状态模式