changelog
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseChangelog Generator
变更日志生成器
Generate changelogs from git commits and manage release notes.
从Git提交记录生成变更日志并管理发布说明。
Prerequisites
前置条件
bash
undefinedbash
undefinedGit
Git
git --version
git --version
GitHub CLI (for release notes)
GitHub CLI(用于发布说明)
brew install gh
gh auth login
brew install gh
gh auth login
Gemini (for AI summaries)
Gemini(用于AI摘要)
pip install google-generativeai
export GEMINI_API_KEY=your_api_key
undefinedpip install google-generativeai
export GEMINI_API_KEY=your_api_key
undefinedCLI Reference
CLI参考
Git History Commands
Git历史记录命令
bash
undefinedbash
undefinedRecent commits
最近的提交
git log --oneline -20
git log --oneline -20
Since last tag
自上一个标签以来的提交
git log $(git describe --tags --abbrev=0)..HEAD --oneline
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Between tags
两个标签之间的提交
git log v1.0.0..v1.1.0 --oneline
git log v1.0.0..v1.1.0 --oneline
With full messages
包含完整提交信息
git log v1.0.0..v1.1.0 --pretty=format:"%h %s%n%b"
git log v1.0.0..v1.1.0 --pretty=format:"%h %s%n%b"
By author
按作者筛选
git log --author="name" --oneline -10
git log --author="name" --oneline -10
With dates
包含日期
git log --format="%h %ad %s" --date=short
undefinedgit log --format="%h %ad %s" --date=short
undefinedFinding Tags
查找标签
bash
undefinedbash
undefinedList all tags
列出所有标签
git tag
git tag
List tags with dates
列出带日期的标签
git tag --sort=-creatordate --format='%(refname:short) %(creatordate:short)'
git tag --sort=-creatordate --format='%(refname:short) %(creatordate:short)'
Latest tag
最新标签
git describe --tags --abbrev=0
git describe --tags --abbrev=0
Tags matching pattern
匹配指定模式的标签
git tag -l "v1.*"
undefinedgit tag -l "v1.*"
undefinedGenerating Changelogs
生成变更日志
From Git Log
从Git日志生成
bash
undefinedbash
undefinedSimple changelog since tag
自指定标签以来的简易变更日志
git log v1.0.0..HEAD --oneline > CHANGELOG_DRAFT.md
git log v1.0.0..HEAD --oneline > CHANGELOG_DRAFT.md
Categorized by conventional commits
按规范提交类型分类
git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* feat:"
git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* fix:"
git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* chore:"
undefinedgit log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* feat:"
git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* fix:"
git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* chore:"
undefinedUsing GitHub CLI
使用GitHub CLI生成
bash
undefinedbash
undefinedGenerate release notes
生成发布说明
gh release create v1.1.0 --generate-notes
gh release create v1.1.0 --generate-notes
View release notes draft
查看发布说明草稿
gh release create v1.1.0 --generate-notes --notes-start-tag v1.0.0 --dry-run
gh release create v1.1.0 --generate-notes --notes-start-tag v1.0.0 --dry-run
From existing release
从现有发布查看说明
gh release view v1.0.0
undefinedgh release view v1.0.0
undefinedAI-Generated Changelog
AI生成的变更日志
bash
undefinedbash
undefinedGet commits since last tag
获取自上一个标签以来的提交记录
COMMITS=$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s%n%b")
COMMITS=$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s%n%b")
Generate polished changelog
生成优化后的变更日志
gemini -m pro -o text -e "" "Generate a changelog from these commits:
$COMMITS
Format as:
gemini -m pro -o text -e "" "Generate a changelog from these commits:
$COMMITS
Format as:
[Version] - Date
[Version] - Date
Added
Added
- New features
- New features
Changed
Changed
- Modifications
- Modifications
Fixed
Fixed
- Bug fixes
- Bug fixes
Breaking Changes
Breaking Changes
- Any breaking changes
Write user-friendly descriptions, not raw commit messages."
undefined- Any breaking changes
Write user-friendly descriptions, not raw commit messages."
undefinedWorkflow Patterns
工作流模式
Release Preparation
发布准备
bash
#!/bin/bash
VERSION=$1
LAST_TAG=$(git describe --tags --abbrev=0)
echo "# Release $VERSION"
echo ""
echo "Changes since $LAST_TAG:"
echo ""bash
#!/bin/bash
VERSION=$1
LAST_TAG=$(git describe --tags --abbrev=0)
echo "# Release $VERSION"
echo ""
echo "Changes since $LAST_TAG:"
echo ""Categorize commits
分类提交记录
echo "## Features"
git log $LAST_TAG..HEAD --oneline | grep -i "feat:" | sed 's/^[a-f0-9]* feat: /- /'
echo ""
echo "## Fixes"
git log $LAST_TAG..HEAD --oneline | grep -i "fix:" | sed 's/^[a-f0-9]* fix: /- /'
echo ""
echo "## Other"
git log $LAST_TAG..HEAD --oneline | grep -v -i "feat:|fix:" | sed 's/^[a-f0-9]* /- /'
undefinedecho "## Features"
git log $LAST_TAG..HEAD --oneline | grep -i "feat:" | sed 's/^[a-f0-9]* feat: /- /'
echo ""
echo "## Fixes"
git log $LAST_TAG..HEAD --oneline | grep -i "fix:" | sed 's/^[a-f0-9]* fix: /- /'
echo ""
echo "## Other"
git log $LAST_TAG..HEAD --oneline | grep -v -i "feat:|fix:" | sed 's/^[a-f0-9]* /- /'
undefinedBreaking Changes Detection
破坏性变更检测
bash
undefinedbash
undefinedFind breaking changes in commit messages
在提交信息中查找破坏性变更
git log v1.0.0..HEAD --oneline | grep -i "breaking|BREAKING"
git log v1.0.0..HEAD --oneline | grep -i "breaking|BREAKING"
Find in commit bodies
在提交正文中查找破坏性变更
git log v1.0.0..HEAD --grep="BREAKING" --pretty=format:"%h %s"
undefinedgit log v1.0.0..HEAD --grep="BREAKING" --pretty=format:"%h %s"
undefinedMaintaining CHANGELOG.md
维护CHANGELOG.md
Standard format (Keep a Changelog):
markdown
undefined标准格式(遵循Keep a Changelog规范):
markdown
undefinedChangelog
Changelog
All notable changes to this project will be documented in this file.
All notable changes to this project will be documented in this file.
[Unreleased]
[Unreleased]
Added
Added
- New feature X
- New feature X
Changed
Changed
- Updated Y
- Updated Y
Fixed
Fixed
- Bug in Z
- Bug in Z
[1.1.0] - 2024-01-15
[1.1.0] - 2024-01-15
Added
Added
- Feature A
- Feature B
- Feature A
- Feature B
Fixed
Fixed
- Issue #123
undefined- Issue #123
undefinedUpdate Script
更新脚本
bash
#!/bin/bash
VERSION=$1
DATE=$(date +%Y-%m-%d)bash
#!/bin/bash
VERSION=$1
DATE=$(date +%Y-%m-%d)Generate new section
生成新的版本章节
NEW_SECTION="## [$VERSION] - $DATE
$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s")
"
NEW_SECTION="## [$VERSION] - $DATE
$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s")
"
Prepend to changelog (after header)
将新章节插入到变更日志头部(标题之后)
head -7 CHANGELOG.md > CHANGELOG_NEW.md
echo "" >> CHANGELOG_NEW.md
echo "$NEW_SECTION" >> CHANGELOG_NEW.md
echo "" >> CHANGELOG_NEW.md
tail -n +8 CHANGELOG.md >> CHANGELOG_NEW.md
mv CHANGELOG_NEW.md CHANGELOG.md
undefinedhead -7 CHANGELOG.md > CHANGELOG_NEW.md
echo "" >> CHANGELOG_NEW.md
echo "$NEW_SECTION" >> CHANGELOG_NEW.md
echo "" >> CHANGELOG_NEW.md
tail -n +8 CHANGELOG.md >> CHANGELOG_NEW.md
mv CHANGELOG_NEW.md CHANGELOG.md
undefinedStatistics
统计信息
bash
undefinedbash
undefinedCommits by author since tag
自指定标签以来按作者统计提交数
git shortlog -sn v1.0.0..HEAD
git shortlog -sn v1.0.0..HEAD
Files changed
变更的文件统计
git diff --stat v1.0.0..HEAD | tail -1
git diff --stat v1.0.0..HEAD | tail -1
Commits per day
每日提交数统计
git log --format="%ad" --date=short v1.0.0..HEAD | sort | uniq -c
git log --format="%ad" --date=short v1.0.0..HEAD | sort | uniq -c
Most changed files
变更最频繁的文件
git diff --stat v1.0.0..HEAD | sort -k3 -n -r | head -10
undefinedgit diff --stat v1.0.0..HEAD | sort -k3 -n -r | head -10
undefinedGitHub Releases
GitHub 发布
bash
undefinedbash
undefinedCreate release with notes
创建带说明的发布版本
gh release create v1.1.0 --title "v1.1.0" --notes-file RELEASE_NOTES.md
gh release create v1.1.0 --title "v1.1.0" --notes-file RELEASE_NOTES.md
Create from tag with auto-notes
从标签创建并自动生成说明
gh release create v1.1.0 --generate-notes
gh release create v1.1.0 --generate-notes
Edit existing release
编辑现有发布版本
gh release edit v1.1.0 --notes-file UPDATED_NOTES.md
gh release edit v1.1.0 --notes-file UPDATED_NOTES.md
List releases
列出所有发布版本
gh release list
gh release list
Download release assets
下载发布资产
gh release download v1.1.0
undefinedgh release download v1.1.0
undefinedBest Practices
最佳实践
- Use conventional commits - Enables automatic categorization
- Tag releases - Clean boundaries for changelogs
- Write for users - Translate technical to user impact
- Note breaking changes - Prominently marked
- Include issue references - Link to related issues
- Date your releases - Clear timeline
- Keep unreleased section - Track ongoing work
- 使用规范提交格式 - 支持自动分类提交记录
- 为发布打标签 - 为变更日志划分清晰的边界
- 面向用户编写 - 将技术内容转化为用户能理解的影响说明
- 标注破坏性变更 - 显著标记此类变更
- 包含问题引用 - 关联相关的问题
- 为发布添加日期 - 清晰展示时间线
- 保留未发布章节 - 跟踪正在进行的工作