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