告别手动更新日志:用 git-cliff 自动从 Git 历史生成美观变更记录
你是否曾经在发布新版本时,面对着一大堆 Git 提交记录发愁?手动整理、归类、格式化这些提交信息,编写更新日志(changelog),既繁琐又容易出错。这个过程虽然必要,但很少有人真正喜欢去做。
想象一下,如果能够自动化这一过程,让更新日志直接从 Git 提交历史中自动生成,会怎样?这就是 git-cliff
要做的事情。
什么是 git-cliff?
git-cliff
是一个命令行工具,它能够根据你的 Git 历史生成美观且可定制化的更新日志。该工具使用 Rust 编写,以单个二进制文件发布,安装便捷,运行高效。
其核心能力在于对约定式提交(Conventional Commits)规范的支持。这意味着 git-cliff
可以智能解析你的提交信息,自动将不同类型的提交(例如 feat:
、fix:
、chore:
等)分类,并组织成清晰易读的文档。
简单来说,只要你按照一定的格式书写提交信息,git-cliff
就能自动将其转化为专业的更新日志,彻底告别手动复制粘贴提交哈希值的历史。

为什么你应该尝试 git-cliff?
高度可定制化
如果你不喜欢默认的更新日志格式,完全没有关系。通过一个名为 cliff.toml
的配置文件,你可以灵活调整几乎所有输出细节:
-
自定义页眉和页脚内容; -
调整提交的分组方式; -
修改日期显示格式; -
甚至编写自定义正则表达式,以解析特殊格式的提交信息。
这让你能完全控制更新日志的最终呈现形式,使其完美契合项目需求。
完美支持约定式提交
如果你的团队已经采用约定式提交(这是一种非常推荐的做法),那么 git-cliff
将成为你的得力助手。它能理解不同提交类型的语义,自动将 feat:
归类为“功能新增”,将 fix:
归类为“Bug 修复”,让更新日志结构清晰、一目了然。
过滤无关提交
并不是所有提交都需要出现在更新日志中。通过配置,你可以轻松忽略某些类型的提交(例如 chore:
或 ci:
),确保最终生成的日志只包含对用户有实际意义的变更内容。
智能预置内容
默认情况下,git-cliff
会将新生成的更新日志内容添加到 CHANGELOG.md
文件的顶部——这正是你希望最新版本发布说明出现的位置。
如何安装 git-cliff?
安装 git-cliff
非常简便,你可以通过多种方式完成安装。
使用包管理器安装
如果你使用的是 macOS 或 Linux,推荐使用 Homebrew:
brew install git-cliff
Windows 用户则可以通过 Scoop 安装:
scoop install git-cliff
手动下载二进制文件
你也可以直接从 GitHub Releases 页面下载预编译好的二进制文件,解压后即可使用。
从源码构建
如果你希望从源码构建,请确保已安装 Rust 工具链,然后运行:
cargo install git-cliff
快速开始使用
安装完成后,进入你的 Git 项目目录,运行以下命令:
git cliff --latest
该命令会基于最近的 Git 标签生成更新日志内容。如果希望将输出直接写入 CHANGELOG.md
文件,可以添加输出参数:
git cliff --latest -o CHANGELOG.md
为了更好地适配你的项目,建议创建一个 cliff.toml
配置文件。官方文档提供了丰富的配置示例,帮助你快速上手。
配置示例:定制你的更新日志
以下是一个简单的 cliff.toml
配置示例,用于自定义头部和提交分组:
[changelog]
header = "# 更新日志"
body = """
## [{{ version }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | upper_first }}
{% for commit in commits %}
- {{ commit.message | upper_first }}
{% endfor %}
{% endfor %}
"""
通过类似这样的配置,你可以定义版本标题、日期格式、分组标题等内容,使更新日志完全符合项目风格。
常见问题解答(FAQ)
git-cliff 是否会覆盖我手动编写的更新日志?
默认情况下,git-cliff
会将新内容追加到现有文件的顶部,不会覆盖已有的旧版本日志。你仍然可以保留之前手动编写的内容。
如果我的提交信息不符合约定式提交规范怎么办?
git-cliff
仍然可以处理非规范的提交信息,但可能无法正确分类。你可以通过配置自定义正则表达式来解析特定格式的提交信息。
是否支持 mono-repo(单体仓库)?
是的,git-cliff
支持在 mono-repo 中使用,可以通过配置指定子目录或过滤特定路径的提交。
能否在 CI/CD 流程中自动运行?
完全可以。你可以在 GitHub Actions、GitLab CI 或其他持续集成工具中集成 git-cliff
,使其在每次发布新标签时自动更新日志。
如果我需要中文化输出内容?
是的,通过自定义模板,你可以将更新日志的标题、分组名称等内容设置为中文或其他任何语言。
社区与资源
-
📚 官方文档:详细的使用说明和配置指南。 -
🎥 RustLab 2023 演讲:了解如何将 Git 提交转化为更新日志。 -
✨ 社区博客文章:阅读其他开发者分享的使用经验和技巧。
总结
git-cliff
是一款能够极大提升项目维护效率的工具。它充分利用约定式提交的优势,将规范化的提交信息转化为结构清晰、美观专业的更新日志,减少了手动操作带来的错误和重复劳动。
如果你重视项目的透明度和可维护性,希望为用户提供清晰的变更记录,那么 git-cliff
绝对值得你纳入开发流程。试着在下一个发布周期中使用它,你会发现,原来生成更新日志可以如此轻松。