TL;DR — Quick Summary
git-cliff generates changelogs from your Git commit history. Supports Conventional Commits, custom templates, Keep a Changelog format, and GitHub/GitLab integration.
git-cliff turns Git history into beautiful changelogs. Conventional Commits, custom templates, auto-grouping — release notes on autopilot.
Installation
# macOS
brew install git-cliff
# Arch Linux
sudo pacman -S git-cliff
# Cargo
cargo install git-cliff
Usage
# Generate full changelog
git cliff
# Output to file
git cliff -o CHANGELOG.md
# Latest release only
git cliff --latest
# Unreleased changes
git cliff --unreleased
# Since a specific tag
git cliff --since v1.0.0
# Tag range
git cliff v1.0.0..v2.0.0
# Init configuration
git cliff --init
# Prepend to existing changelog
git cliff --prepend CHANGELOG.md
# Custom config
git cliff --config custom-cliff.toml
# Strip headers
git cliff --strip header
# Bump version
git cliff --bump
Configuration
# cliff.toml
[changelog]
header = "# Changelog\n"
body = """
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | upper_first }}
{% for commit in commits %}
- {{ commit.message | upper_first }} ({{ commit.id | truncate(length=7) }})
{% endfor %}
{% endfor %}
"""
[git]
conventional_commits = true
commit_parsers = [
{ message = "^feat", group = "Features" },
{ message = "^fix", group = "Bug Fixes" },
{ message = "^doc", group = "Documentation" },
{ message = "^perf", group = "Performance" },
{ message = "^refactor", group = "Refactoring" },
]
Summary
- git-cliff generates changelogs from Git commit history
- Parses Conventional Commits (feat/fix/chore) with custom parsers
- Tera templates for fully customizable output format
- Keep a Changelog, GitHub releases, custom formats
- Written in Rust — fast, language-agnostic, CI/CD ready