Commit Diff Analyzer
Goal
Analyze code changes between two git commits, presenting commit metadata, change summaries, and detailed diffs in a structured format for easy review.
Trigger
- User says "对比 commit"、"compare commits"、"查看两个提交的差异"
- User provides two commit IDs and wants to see what changed
Usage Pattern
When user provides two commit IDs (in any order or format), analyze the changes between them:
- Validate commits exist: Run
git cat-file -t <commit>for each commit ID - Get commit info: Run
git log -1 --format=fuller <commit>for both commits - Show diff: Run
git diff <older-commit>..<newer-commit>(chronological order) - Show stats: Run
git diff --stat <older-commit>..<newer-commit>
Output Organization
Present the analysis with:
- Commit metadata - Author, date, commit message for both commits
- Change summary - Files changed, insertions, deletions
- Detailed diff - Line-by-line changes with context
- File breakdown - Group by: Modified, Added, Deleted files
Key Commands
# Validate commits exist
git cat-file -t <commit-id>
# Get full commit info
git log -1 --format="Hash: %H%nAuthor: %an%nDate: %ad%nMessage: %s%n" <commit-id>
# Chronological diff (older..newer)
git diff <older-commit>..<newer-commit>
# Diff stat
git diff --stat <older-commit>..<newer-commit>
# Show files changed
git diff --name-only <older-commit>..<newer-commit>
Handling Edge Cases
- Invalid commit IDs: Report error and suggest running
git logto see recent commits - Same commit: Notify user both IDs point to the same commit
- Non-git directory: Error - skill only works in git repositories
- Reverse order: Detect which commit is older and adjust command accordingly
Commit ID Formats
Accept various formats:
- Full SHA:
abc123def456... - Short SHA:
abc123d(at least 7 chars) - Branch names (if they point to commits)
- HEAD references like
HEAD~5
Example Output Structure
=== Commit A ===
Hash: abc123...
Author: John Doe
Date: 2024-01-15 10:30:00
Message: feat: add user login
=== Commit B ===
Hash: def456...
Author: Jane Smith
Date: 2024-01-20 14:45:00
Message: fix: resolve auth bug
=== Changes Summary ===
5 files changed, 120 insertions(+), 35 deletions(-)
=== File Breakdown ===
Modified: src/auth.js, src/login.html
Added: src/auth-utils.ts
Deleted: src/old-auth.php
=== Diff ===
... (detailed diff output)