A comprehensive collection of tools to generate, format, and visualize changelogs from git commit history. This toolkit includes command-line generators and an advanced web-based parser for analyzing changelog data.
-
git_changelog.py
- Full-featured Python script with advanced categorization -
git_changelog.sh
- Lightweight shell script for quick usage -
git_tag_changelog.sh
- Combined git tag and changelog generation tool -
Makefile
- Convenient targets for common operations -
parser/
- Web-based JSON parser and visualization tool
# Install globally from npm
npm install -g git-changelog-tool
# Now you can run from anywhere:
git-changelog --since "1 week ago"
git-tag-changelog --auto-increment patch
git-changelog-parser
# Install locally in your project
npm install git-changelog-tool
# Run via npx
npx git-changelog --since "1 week ago"
npx git-tag-changelog 1.2.3
npx git-changelog-parser
# Clone the repository
git clone https://github.com/winghei/git-changelog-generator.git
cd git-changelog-generator
make install
# Use directly
./git_changelog.sh --since "1 week ago"
./git_tag_changelog.sh --auto-increment patch
-
Global Installation:
npm install -g git-changelog-tool git-changelog --since "1 week ago"
-
Generate and visualize changelog:
git-changelog --since "1 month ago" --format json --output changelog.json git-changelog-parser # Opens web parser in browser
-
Create releases with tags and changelogs:
# Auto-increment patch version and create tag git-tag-changelog --auto-increment patch # Create specific version tag git-tag-changelog 1.2.3 --push
The shell script provides quick changelog generation with JSON and text output formats:
# Last week's changes
./git_changelog.sh --since "1 week ago"
# Last 20 commits in JSON format
./git_changelog.sh --max-count 20 --format json --output recent_changes.json
# Changes between two dates
./git_changelog.sh --since "2023-12-01" --until "2023-12-31" --format text
# Changes on a specific branch
./git_changelog.sh --branch develop --since "1 week ago"
-
-f, --format
- Output format:json
ortext
(default: json) -
-s, --since
- Show commits since date (e.g., "2023-01-01" or "1 week ago") -
-u, --until
- Show commits until date -
-b, --branch
- Branch to analyze (default: HEAD) -
-n, --max-count
- Maximum number of commits to include -
-o, --output
- Output file (default: stdout) -
-t, --title
- Title for the changelog (default: Changelog) -
--include-time
- Include commit time in the output
The git tag and changelog tool combines version tagging with changelog generation for automated release workflows:
# Auto-increment version and create tag with changelog
./git_tag_changelog.sh --auto-increment patch
# Create specific version tag
./git_tag_changelog.sh 1.2.3 --message "Major release" --push
# Dry run to see what would happen
./git_tag_changelog.sh --auto-increment minor --dry-run
# Use Python script for changelog generation
./git_tag_changelog.sh 2.0.0 --python --format markdown
-
VERSION
- Version to tag (e.g., "1.2.3") -
--auto-increment TYPE
- Auto-increment version: major, minor, patch -
-m, --message MSG
- Tag message (default: "Release VERSION") -
-p, --prefix PREFIX
- Tag prefix (default: "v") -
-f, --format FORMAT
- Changelog format: markdown, json, simple (default: markdown) -
-o, --output FILE
- Changelog output file (default: CHANGELOG-VERSION.md) -
--since-last-tag
- Generate changelog since last tag (default: true) -
--dry-run
- Show what would be done without executing -
--force
- Force tag creation (overwrite existing) -
--lightweight
- Create lightweight tag instead of annotated -
--push
- Push tag to origin after creation -
--python
- Use Python script for changelog generation
- Validates git repository and working tree
- Determines version (provided or auto-incremented)
- Generates changelog since last tag or specified date
- Creates git tag (annotated or lightweight)
- Optionally pushes tag to remote
- Updates package.json version if present
The Python script offers additional output formats including markdown:
# Comprehensive markdown changelog
python3 git_changelog.py --since "1 month ago" --format markdown --title "Release v2.1.0"
# JSON output for web parser
python3 git_changelog.py --since "1 week ago" --format json --output changes.json
# Simple text list
python3 git_changelog.py --max-count 50 --format simple
-
--since
- Show commits since date -
--until
- Show commits until date -
--branch
- Branch to analyze (default: HEAD) -
--max-count
- Maximum number of commits -
--format
- Output format:markdown
,simple
, orjson
(default: markdown) -
--title
- Title for the changelog -
--output
- Output file (default: stdout)
# Quick changelog for last 10 commits
make changelog
# Weekly changelog
make changelog-week
# Monthly changelog
make changelog-month
# Clean generated files
make clean
The parser/
directory contains a comprehensive HTML-based tool for visualizing and analyzing changelog JSON files.
- Multiple File Support: Load and merge multiple changelog JSON files simultaneously
- Drag & Drop Interface: Simply drag JSON file(s) onto the interface
- Smart Merging: Automatically merges commits by hash, avoiding duplicates
- Advanced Filtering: Multi-select filters for types, authors, branches, bugs, files, and date ranges
- Enhanced Search: Full-text search across commit messages with highlighting
- Flexible Layout: Group data by component or commit type
- Bug Tracking: Add, edit, and filter by bug IDs with inline editing
- Commit Editing: Edit commit messages inline with modification tracking
- Export Functionality: Export original data, modifications only, or both
- Color-coded Types: Visual indicators for different commit types
- Responsive Design: Works on different screen sizes
# Generate JSON changelog
git-changelog --since "1 week ago" --format json --output changelog.json
# Open parser in browser
git-changelog-parser
# Drag and drop changelog.json into the parser
- Open
parser/index.html
in any modern web browser (or usemake parser
) - Either:
- Drag and drop one or more JSON files onto the interface, OR
- Click "Choose File" and select your JSON file(s)
- Use the filtering and search tools to analyze your changelog data
- Edit commit messages and bug IDs as needed
- Export your data with modifications
The parser provides comprehensive filtering options:
- Commit Types: Select specific commit types (fix, feat, style, refactor, other)
- Authors: Filter by commit authors
- Branches: Include or exclude specific branches
- Bug IDs: Filter by associated bug identifiers
- Files: Filter by modified file paths
- Date Range: Set start and end dates
- Search: Full-text search across all commit data
- Machine-readable format with comprehensive commit data
- Includes branches, files, bug tracking, and extended metadata
- Perfect for use with the web parser
- Supports bug mention parsing (
@bug:type
format)
- Human-readable format with emoji categorization
- Organized by commit type with clear sections
- Shows commit details and extended descriptions
- Categorizes commits by type with emoji headers
- Links to commit hashes for GitHub/GitLab integration
- Ready for release notes and documentation
- Plain text with bullet points
- Shows commit hash, author, date
- Good for quick reviews
Both command-line tools automatically categorize commits based on:
-
Conventional Commits format (
feat:
,fix:
, etc.) - Keyword detection in commit messages
- Fallback to "Other Changes" category
- 🚀 Features (
feat:
or keywords: feat, add, implement) - 🐛 Bug Fixes (
fix:
or keywords: fix, bug, patch) - 📚 Documentation (
docs:
or keywords: doc, readme) - 💄 Styles (
style:
or keywords: style, format) - ♻️ Code Refactoring (
refactor:
or keywords: refactor, restructure) - ⚡ Performance (
perf:
or keywords: perf, optimize) - ✅ Tests (
test:
or keywords: test, spec) - 🔧 Chores (
chore:
or keywords: chore, update, bump)
The shell script supports bug mention parsing in commit messages:
- Use
@bug:type
format in commit messages - Supported types:
fn
(functional),log
(logical),flow
(workflow),unit
(unit-test),bound
(boundary),security
,perf
(performance) - Bug mentions are extracted and included in JSON output
- Web parser allows editing and filtering by bug IDs
Both tools generate/expect JSON in this format:
{
"title": "Changelog (since date)",
"generated_on": "2025-06-30 09:46:56",
"commits": [
{
"type": "fix|feat|style|refactor|other",
"component": "component-name",
"commit_log": "Commit message description",
"commit_hash": "abc123def",
"date": "2025-06-27 14:03:28 +0200",
"author": "Author Name",
"branches": ["branch1", "branch2"],
"bugs": ["BUG-123", "BUG-456"],
"files": ["path/to/file1.js", "path/to/file2.ts"],
"body": "Optional extended commit message body"
}
]
}
# Method 1: Global CLI (after npm install -g)
git-tag-changelog --auto-increment patch --push
# Method 2: Local CLI (via npx)
npx git-tag-changelog --auto-increment patch --push
# Method 3: Using shell script directly
./git_tag_changelog.sh --auto-increment patch --push
# Method 4: Using Makefile targets
make release-patch # Auto-increment patch version
make release-minor # Auto-increment minor version
make release-major # Auto-increment major version
# Method 5: Custom version
make tag-and-changelog VERSION=2.1.0
# Method 6: Using Node.js API
const GitChangelogGenerator = require('git-changelog-generator');
const generator = new GitChangelogGenerator();
// Create tag and changelog
const result = await generator.createTagAndChangelog('1.2.3', {
message: 'Release v1.2.3',
push: true,
format: 'markdown'
});
// Auto-increment version
const result = await generator.autoIncrementTag('patch', {
dryRun: false,
push: true
});
# 1. Generate changelog and open parser
git-changelog --since "1 week ago" --format json --output weekly.json
git-changelog-parser
# 2. In the parser: drag and drop weekly.json
# 3. Filter, edit, and analyze the data
# 4. Export the results
# Alternative: Everything in one flow
git-changelog --format json --output changelog.json && git-changelog-parser
# Generate JSON changelog for the week
git-changelog --since "last monday" --output weekly.json
# Open parser to analyze
git-changelog-parser
# Filter by author to see individual contributions
# Export summary for team meeting
# Generate markdown changelog for release
python3 git_changelog.py --since "v1.0.0" --format markdown --title "Release v1.1.0" --output RELEASE_NOTES.md
# Generate detailed JSON for analysis
./git_changelog.sh --since "v1.0.0" --output release_data.json
# Use parser to review and edit commit messages before publishing
# Generate JSON with bug tracking
./git_changelog.sh --since "1 month ago" --output bugs.json
# Use parser to:
# - Filter by bug types
# - Add missing bug IDs
# - Export clean dataset
- Use
--since "last monday"
for weekly reports - Use
--since "1 month ago"
for release notes - Combine command-line generation with web parser analysis
- Use JSON format for comprehensive data, markdown for documentation
- The web parser works great for collaborative changelog review
- Export parser modifications to maintain changelog quality
The web parser works in all modern browsers supporting:
- ES6 Classes
- FileReader API
- Drag and Drop API
- CSS Grid/Flexbox
- Local Storage
- Command-line tools: No external dependencies (bash, python3, git)
- Web parser: No external libraries (vanilla HTML/CSS/JavaScript)
This project was developed with AI assistance using Claude (Anthropic), which helped design and implement the tag and changelog automation features, comprehensive testing suite, and documentation. The AI provided guidance on best practices for shell scripting, Node.js APIs, and project structure while maintaining the original vision and requirements of the git changelog generator.