12 KiB
Git Diff Analyzer Examples
This file contains example scenarios demonstrating how to use the get-git-diff skill for various diff analysis tasks.
Example 1: Comparing Two Specific Commits
Scenario
Developer wants to see what changed between two feature commits.
User Prompt
I need to see the diff between commits a1b2c3d and e4f5g6h
Skill Execution
Step 1 - Commit Identification:
- Commits provided:
a1b2c3dande4f5g6h - Validate:
git rev-parse a1b2c3d e4f5g6h - Get metadata:
git log -1 --format="%H|%h|%an|%ae|%ad|%s" [commit]
Step 2 - Execute Diff:
git diff a1b2c3d...e4f5g6h
git diff --stat a1b2c3d...e4f5g6h
git diff --name-status a1b2c3d...e4f5g6h
Step 3 - Analysis:
Commit Metadata:
- From: a1b2c3d (John Doe, 2025-11-01, "Add user authentication")
- To: e4f5g6h (Jane Smith, 2025-11-13, "Refactor auth module")
- Commits between: 15
Statistics:
- Files changed: 8
- Insertions: 234
- Deletions: 156
- Net change: +78
File Operations:
- Modified: src/auth/login.py, src/auth/session.py, tests/test_auth.py
- Added: src/auth/jwt_handler.py, src/auth/validators.py
- Deleted: src/auth/legacy_auth.py
Step 4 - Output:
File: /claudedocs/diff_a1b2c3d_e4f5g6h.md
Example 2: Comparing Current Branch to Main
Scenario
Developer wants to review all changes in feature branch before creating a PR.
User Prompt
Show me the diff for my feature branch compared to main
Skill Response
Since no specific commits provided, ask user:
- Option A: Compare specific commit hashes
- Option B: Compare HEAD of current branch to main ← User selects this
- Option C: Compare two branch names
- Option D: Compare current changes to a specific commit
Step 1 - Commit Identification:
# Get current branch
git rev-parse --abbrev-ref HEAD # Returns: feature/new-api
# Get commit hashes
git rev-parse main # Returns: d7e8f9a...
git rev-parse HEAD # Returns: m3n4o5p...
Step 2 - Execute Diff:
git diff main...HEAD
git diff --stat main...HEAD
git diff --name-status main...HEAD
Step 3 - Analysis:
Comparing: main (d7e8f9a) → feature/new-api (m3n4o5p)
Statistics:
- Files changed: 12
- Insertions: 567
- Deletions: 89
- Net change: +478
File Operations:
- Added: src/api/v2/endpoints.py, src/api/v2/schemas.py, tests/api/test_v2.py
- Modified: src/api/router.py, src/main.py, README.md
- Deleted: (none)
Change Categorization:
- Source code: 8 files (src/api/*, src/main.py)
- Tests: 3 files (tests/api/*)
- Documentation: 1 file (README.md)
Impact Areas:
- API routing layer
- Request/response schemas
- Test coverage
Step 4 - Output:
File: /claudedocs/diff_d7e8f9a_m3n4o5p.md
Example 3: Large Diff Handling
Scenario
Comparing two commits with extensive changes (e.g., major refactoring or dependency update).
User Prompt
Compare commit abc1234 to def5678
Step 2 - Execute Diff:
git diff --stat abc1234...def5678
# Output shows: 87 files changed, 15234 insertions(+), 12456 deletions(-)
Large Diff Detected: Total lines = 27,690
Skill Response: ⚠️ Large Diff Warning
This diff contains 27,690 lines across 87 files. This is a substantial change set.
Would you like to:
- Option A: Proceed with full diff (will be very long)
- Option B: Summary only (statistics and file list, no line-by-line diff)
User selects: Option B - Summary only
Step 3 - Analysis:
Commit Metadata:
- From: abc1234 (Team Lead, 2025-10-15, "Update dependencies to Python 3.12")
- To: def5678 (Team Lead, 2025-11-13, "Complete Python 3.12 migration")
Statistics:
- Files changed: 87
- Insertions: 15,234
- Deletions: 12,456
- Net change: +2,778
Top Changed Files:
1. requirements.txt (+45, -32)
2. src/core/utils.py (+234, -189)
3. tests/test_compatibility.py (+456, -123)
... (84 more files)
Change Categorization:
- Dependency files: 3 files
- Source code: 62 files
- Tests: 18 files
- Documentation: 4 files
Impact Assessment:
⚠️ Major refactoring detected
⚠️ Breaking changes likely
⚠️ Extensive test updates
Step 4 - Output:
File: /claudedocs/diff_abc1234_def5678.md
Note in output: "Full unified diff omitted due to size (27,690 lines). Use git diff abc1234...def5678 to view complete diff."
Example 4: Renamed Files Detection
Scenario
Developer refactored project structure, moving files to new directories.
User Prompt
Show me what changed in the refactoring commit x9y8z7w
Step 1 - Commit Identification:
- Comparing: x9y8z7w^ (parent) → x9y8z7w (the refactoring commit)
Step 2 - Execute Diff with Rename Detection:
git diff -M x9y8z7w^...x9y8z7w
git diff --name-status -M x9y8z7w^...x9y8z7w
Output:
R100 src/utils.py → src/core/utils.py
R100 src/helpers.py → src/core/helpers.py
R085 src/auth.py → src/auth/main.py
M src/main.py
A src/core/__init__.py
Step 3 - Analysis:
Commit Metadata:
- Commit: x9y8z7w (Developer, 2025-11-12, "Refactor: reorganize project structure")
Statistics:
- Files changed: 6
- Insertions: 45
- Deletions: 12
- Net change: +33
File Operations:
- Renamed (no changes):
• src/utils.py → src/core/utils.py
• src/helpers.py → src/core/helpers.py
- Renamed + Modified (85% similarity):
• src/auth.py → src/auth/main.py
- Modified:
• src/main.py (updated imports)
- Added:
• src/core/__init__.py (new package init)
Change Type: Refactoring
Risk Assessment: Medium (import paths changed, may break external references)
Step 4 - Output:
File: /claudedocs/diff_w6v5u4t_x9y8z7w.md
Example 5: Merge Commit Analysis
Scenario
Developer wants to understand what a merge commit introduced.
User Prompt
Analyze the merge commit m1e2r3g4
Step 1 - Commit Identification:
git rev-list --merges m1e2r3g4^..m1e2r3g4
# Confirms: m1e2r3g4 is a merge commit
git log -1 --format="%P" m1e2r3g4
# Returns: a1b2c3d e4f5g6h (two parents)
Skill Response: ⚠️ Merge Commit Detected
This is a merge commit with two parents:
- Parent 1: a1b2c3d (main branch)
- Parent 2: e4f5g6h (feature branch)
Step 2 - Execute Diff:
# Show changes introduced by the merge (against first parent)
git diff m1e2r3g4^1...m1e2r3g4
git diff --stat m1e2r3g4^1...m1e2r3g4
Step 3 - Analysis:
Merge Commit Metadata:
- Commit: m1e2r3g4
- Author: John Doe
- Date: 2025-11-13
- Message: "Merge feature/user-profiles into main"
- Parent 1 (base): a1b2c3d (main)
- Parent 2 (merged): e4f5g6h (feature/user-profiles)
Statistics:
- Files changed: 15
- Insertions: 892
- Deletions: 134
- Net change: +758
Merged Branch Summary:
- Branch: feature/user-profiles
- Commits merged: 23
- Primary changes:
• New user profile management system
• Profile API endpoints
• Profile database models
• Associated tests
Change Categorization:
- Source code: 9 files (src/profiles/*, src/api/profiles.py)
- Database: 2 files (migrations/*, models/profile.py)
- Tests: 3 files (tests/profiles/*)
- Documentation: 1 file (docs/api.md)
Merge Notes:
✓ No merge conflicts (clean merge)
✓ All tests passing (based on commit message)
Step 4 - Output:
File: /claudedocs/diff_a1b2c3d_m1e2r3g4.md
Special note in file: "This is a merge commit analysis showing changes introduced by merging feature/user-profiles into main."
Example 6: Comparing Branches by Name
Scenario
Developer wants to see differences between two branches without knowing commit hashes.
User Prompt
Compare the staging branch to the production branch
Skill Response: No specific commits provided. Asking user for comparison target...
User selects: Option C - Compare two branch names
Please provide:
- First branch: production
- Second branch: staging
Step 1 - Commit Identification:
git rev-parse production # Returns: p1r2o3d...
git rev-parse staging # Returns: s4t5a6g...
git log --oneline production..staging
# Shows: 8 commits ahead
Step 3 - Analysis:
Comparing Branches:
- production (p1r2o3d): "Release v2.1.0" (2025-11-01)
- staging (s4t5a6g): "Add feature X" (2025-11-13)
- Commits ahead: 8
- Commits behind: 0
Statistics:
- Files changed: 24
- Insertions: 1,234
- Deletions: 456
- Net change: +778
File Operations:
- Added: 8 files (new features)
- Modified: 14 files (enhancements)
- Deleted: 2 files (deprecated code)
Impact Assessment:
✓ Ready for production deployment
✓ All features tested in staging
⚠️ Database migration required (see migrations/0023_add_feature_x.py)
Step 4 - Output:
File: /claudedocs/diff_p1r2o3d_s4t5a6g.md
Example 7: Current Working Directory Changes
Scenario
Developer has uncommitted changes and wants to see diff against last commit.
User Prompt
Show me my current uncommitted changes
Skill Response: No specific commits provided. Asking user...
User selects: Option D - Compare current changes to a specific commit
Please provide the commit to compare against (or press Enter for HEAD): [User presses Enter]
Step 1 - Commit Identification:
# Comparing working directory against HEAD
git rev-parse HEAD # Returns: h3e4a5d...
Step 2 - Execute Diff:
git diff HEAD
git diff --stat HEAD
git diff --name-status HEAD
Step 3 - Analysis:
Working Directory Changes:
- Base commit: h3e4a5d (HEAD, "Latest commit")
- Status: Uncommitted changes
Statistics:
- Files changed: 3
- Insertions: 67
- Deletions: 23
- Net change: +44
File Operations:
- Modified:
• src/api/endpoints.py (+45, -12)
• tests/test_api.py (+18, -8)
• README.md (+4, -3)
Change Type: Feature development (in progress)
Status: ⚠️ Uncommitted - not yet in version control
Step 4 - Output:
File: /claudedocs/diff_h3e4a5d_working.md
Example 8: Binary Files in Diff
Scenario
Diff includes binary file changes (images, PDFs, compiled files).
User Prompt
Compare commit old123 to new456
Step 2 - Execute Diff:
git diff --stat old123...new456
git diff --name-status old123...new456
Output includes:
M docs/architecture.pdf
M static/images/logo.png
A static/images/hero.jpg
Step 3 - Analysis:
Statistics:
- Files changed: 15
- Text files: 12 (analyzed in diff)
- Binary files: 3 (listed separately)
Text File Changes:
- Insertions: 234
- Deletions: 156
- Net change: +78
Binary File Changes:
- Modified:
• docs/architecture.pdf (binary file changed)
• static/images/logo.png (binary file changed)
- Added:
• static/images/hero.jpg (new binary file)
Note: Binary file content changes not shown in diff.
Use `git show old123:path` and `git show new456:path` to extract binary files.
Step 4 - Output: File includes note: "⚠️ This diff contains 3 binary files. Binary content not displayed. See summary for list of affected binary files."
Summary of Use Cases
- Two specific commits - Direct comparison with full metadata
- Branch to main - Pre-PR review workflow
- Large diffs - Summary-only option for massive changes
- Renamed files - Detect and document file restructuring
- Merge commits - Special handling with parent information
- Branch comparison - Compare branch tips by name
- Working directory - Review uncommitted changes
- Binary files - Special notation for non-text files
Best Practices
- Always validate commits exist before running diff
- For large diffs, offer summary option first
- Clearly indicate merge commits with special notation
- Show both old and new paths for renamed files
- Categorize changes by file type and impact area
- Provide actionable insights in the summary
- Save output with descriptive filenames
- Include enough metadata for audit trail