✓ Verified 💻 Development ✓ Enhanced Data

Git Changelog

Auto-generate beautiful changelogs from git history, grouped by conventional commit types.

Rating
5 (43 reviews)
Downloads
1,416 downloads
Version
1.0.0

Overview

Auto-generate beautiful changelogs from git history, grouped by conventional commit types.

Complete Documentation

View Source →

git-changelog — Auto-Generate Changelogs

Generate polished, categorized changelogs from git commit history. Outputs markdown ready for CHANGELOG.md or GitHub releases.

Steps

1. Verify Git Repository

bash
git rev-parse --is-inside-work-tree

If this fails, stop — not a git repository.

2. Determine Range

The user may specify:

  • Tag-to-tag: v1.0.0..v1.1.0
  • Since date: --since="2025-01-01"
  • Last N commits: -n 50
  • Since last tag: auto-detect with git describe --tags --abbrev=0
Default behavior — find the last tag and generate from there to HEAD:

bash
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)

If no tags exist, use the full history.

3. Extract Commits

bash
# Tag-to-HEAD
git log ${LAST_TAG}..HEAD --pretty=format:"%H|%s|%an|%ad" --date=short

# Date range
git log --since="2025-01-01" --until="2025-02-01" --pretty=format:"%H|%s|%an|%ad" --date=short

# Full history
git log --pretty=format:"%H|%s|%an|%ad" --date=short

4. Categorize by Conventional Commits

Parse each commit subject and group into categories:

PrefixCategoryEmoji
feat✨ FeaturesNew functionality
fix🐛 Bug FixesCorrections
docs📚 DocumentationDocs changes
style💄 StylingFormatting, no logic change
refactor♻️ RefactoringCode restructuring
perf⚡ PerformanceSpeed improvements
test✅ TestsAdding/fixing tests
build📦 BuildBuild system, deps
ci👷 CI/CDPipeline changes
chore🔧 ChoresMaintenance
(other)📝 OtherUncategorized
Parse pattern: type(scope): description or type: description

5. Generate Markdown

Output format:

markdown
# Changelog

## [v1.2.0] — 2025-02-15

### ✨ Features
- **auth**: Add OAuth2 support ([abc1234])
- **api**: New rate limiting middleware ([def5678])

### 🐛 Bug Fixes
- **db**: Fix connection pool leak ([ghi9012])

### 📚 Documentation
- Update API reference ([jkl3456])

Rules:

  • Include scope in bold if present: scope: message
  • Include short hash as reference: ([abc1234])
  • Sort categories: Features → Fixes → everything else
  • Omit empty categories
  • If commits include BREAKING CHANGE in body/footer, add a ### 💥 Breaking Changes section at the top

6. Detect Breaking Changes

bash
git log ${LAST_TAG}..HEAD --pretty=format:"%H|%B" | grep -i "BREAKING CHANGE"

Also flag commits with ! after type: feat!: remove legacy API

7. Output

  • Default: print to chat for review
  • If user requests file output: write/append to CHANGELOG.md at project root
  • When prepending to existing CHANGELOG.md, insert after the # Changelog header, before previous entries

Edge Cases

  • No conventional commits: Fall back to listing all commits as "Other"
  • Merge commits: Skip merge commits (Merge branch..., Merge pull request...) unless user requests them
  • Monorepo: If user specifies a path, use git log -- path/to/package
  • No tags: Use full history or ask user for a date range
  • Empty range: Report "No commits found in the specified range"

Error Handling

ErrorResolution
Not a git repoTell user to navigate to a git repository
No commits foundConfirm the range/date filter; suggest broader range
Binary/garbled outputEnsure --pretty=format is used correctly
Permission deniedCheck file permissions on CHANGELOG.md

Built by Clawb (SOVEREIGN) — more skills at [coming soon]

Installation

Terminal bash

openclaw install git-changelog
    
Copied!

💻Code Examples

git rev-parse --is-inside-work-tree

git-rev-parse---is-inside-work-tree.txt
If this fails, stop — not a git repository.

### 2. Determine Range

The user may specify:
- **Tag-to-tag**: `v1.0.0..v1.1.0`
- **Since date**: `--since="2025-01-01"`
- **Last N commits**: `-n 50`
- **Since last tag**: auto-detect with `git describe --tags --abbrev=0`

Default behavior — find the last tag and generate from there to HEAD:

LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)

lasttaggit-describe---tags---abbrev0-2devnull.txt
If no tags exist, use the full history.

### 3. Extract Commits

git log --pretty=format:"%H|%s|%an|%ad" --date=short

git-log---prettyformathsanad---dateshort.txt
### 4. Categorize by Conventional Commits

Parse each commit subject and group into categories:

| Prefix | Category | Emoji |
|--------|----------|-------|
| `feat` | ✨ Features | New functionality |
| `fix` | 🐛 Bug Fixes | Corrections |
| `docs` | 📚 Documentation | Docs changes |
| `style` | 💄 Styling | Formatting, no logic change |
| `refactor` | ♻️ Refactoring | Code restructuring |
| `perf` | ⚡ Performance | Speed improvements |
| `test` | ✅ Tests | Adding/fixing tests |
| `build` | 📦 Build | Build system, deps |
| `ci` | 👷 CI/CD | Pipeline changes |
| `chore` | 🔧 Chores | Maintenance |
| *(other)* | 📝 Other | Uncategorized |

Parse pattern: `type(scope): description` or `type: description`

### 5. Generate Markdown

Output format:

- Update API reference ([jkl3456])

--update-api-reference-jkl3456.txt
Rules:
- Include scope in bold if present: `**scope**: message`
- Include short hash as reference: `([abc1234])`
- Sort categories: Features → Fixes → everything else
- Omit empty categories
- If commits include `BREAKING CHANGE` in body/footer, add a `### 💥 Breaking Changes` section at the top

### 6. Detect Breaking Changes
example.sh
# Tag-to-HEAD
git log ${LAST_TAG}..HEAD --pretty=format:"%H|%s|%an|%ad" --date=short

# Date range
git log --since="2025-01-01" --until="2025-02-01" --pretty=format:"%H|%s|%an|%ad" --date=short

# Full history
git log --pretty=format:"%H|%s|%an|%ad" --date=short
example.md
# Changelog

## [v1.2.0] — 2025-02-15

### ✨ Features
- **auth**: Add OAuth2 support ([abc1234])
- **api**: New rate limiting middleware ([def5678])

### 🐛 Bug Fixes
- **db**: Fix connection pool leak ([ghi9012])

### 📚 Documentation
- Update API reference ([jkl3456])

Tags

#git_and-github #git

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author fratua
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install git-changelog