Marketplace git-analysis
Analyze git repository changes, branch differences, and commit history. Use when analyzing branches, comparing changes, examining commit history, or preparing for PR/commit operations.
git clone https://github.com/aiskillstore/marketplace
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/1natsu172/git-analysis" ~/.claude/skills/aiskillstore-marketplace-git-analysis && rm -rf "$T"
skills/1natsu172/git-analysis/SKILL.mdGit Analysis
This Skill provides comprehensive git repository analysis capabilities for understanding branch changes, commit history, and code differences.
Capabilities
- Analyze branch differences and merge bases
- Extract structured commit history
- Identify changed files and their statistics
- Determine default branches and remote configuration
- Support PR creation, code review, and commit operations
When to Use
Use this Skill when you need to:
- Analyze what changed in a branch
- Prepare information for PR creation
- Review commit history
- Compare branches
- Understand code changes for commits or reviews
Core Analysis Steps
1. Identify Default Branch
Get the repository's default branch (usually
main or master):
git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
This identifies the base branch for comparison.
2. Find Merge Base
Determine where the current branch diverged from the default branch:
# Get merge base git merge-base origin/<default-branch> HEAD
The merge base is the commit where the branch diverged, not the current state of the base branch.
3. Analyze Changes
Get comprehensive change information:
# List commits from merge base git log --oneline <merge-base>..HEAD # Get detailed commit information git log --format="%H|%s|%an|%ae|%ad" --date=iso <merge-base>..HEAD # Get file statistics git diff --stat <merge-base>..HEAD # Get full diff git diff <merge-base>..HEAD
4. Check Current State
Understand unstaged and staged changes:
# Check untracked files git status # Check staged changes git diff --cached # Check unstaged changes git diff
Helper Scripts
This Skill includes helper scripts for common operations:
get_branch_diff.sh
Extracts branch differences including:
- Default branch name
- Merge base commit
- Commit list with statistics
- Changed files summary
Usage:
bash scripts/get_branch_diff.sh
Output format:
DEFAULT_BRANCH: main MERGE_BASE: abc123def456 COMMITS: 5 CHANGED_FILES: 12
get_commit_history.sh
Extracts detailed commit history in structured format:
Usage:
bash scripts/get_commit_history.sh <merge-base>
Output format (one commit per line):
hash|subject|author_name|author_email|date
Best Practices
- Always use merge-base: Compare from merge base, not from current base branch state
- Run commands in parallel: When gathering multiple pieces of information, run independent git commands in parallel
- Structure the output: Parse git output into structured data for easier consumption
- Handle errors gracefully: Check if commands succeed before proceeding
Common Patterns
Pattern 1: Full Branch Analysis
# Get all information in parallel git status & git diff --cached & git diff & DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') MERGE_BASE=$(git merge-base origin/$DEFAULT_BRANCH HEAD) git log --oneline $MERGE_BASE..HEAD git diff --stat $MERGE_BASE..HEAD wait
Pattern 2: Commit History Extraction
# Get structured commit data MERGE_BASE=$(git merge-base origin/$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') HEAD) git log --format="%H|%s|%an|%ae|%ad" --date=iso $MERGE_BASE..HEAD
Pattern 3: Change Summary
# Get high-level change summary MERGE_BASE=$(git merge-base origin/$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') HEAD) echo "Commits: $(git log --oneline $MERGE_BASE..HEAD | wc -l)" echo "Files changed: $(git diff --stat $MERGE_BASE..HEAD | tail -1)"
Integration with Other Skills
This Skill works well with:
: Use git analysis results to generate PR contentgithub-pr-best-practices- Commit message generation: Analyze changes to create meaningful commit messages
- Code review: Understand what changed for review purposes
Error Handling
Handle common git errors:
# Check if in git repository if ! git rev-parse --git-dir > /dev/null 2>&1; then echo "Error: Not in a git repository" exit 1 fi # Check if remote exists if ! git ls-remote origin > /dev/null 2>&1; then echo "Error: Remote 'origin' not found" exit 1 fi # Check if branch has commits if [ -z "$(git log --oneline $MERGE_BASE..HEAD)" ]; then echo "Warning: No commits found in branch" fi
Output Format Recommendations
When presenting git analysis results:
- Summary first: Start with high-level statistics
- Structured data: Use consistent formatting for easy parsing
- Contextual information: Include branch names and dates
- Actionable insights: Highlight what's important for the task
Example output structure:
Branch Analysis Summary ----------------------- Base branch: main Current branch: feature/new-feature Diverged at: abc123d (2025-01-15) Changes: - 5 commits - 12 files changed - 234 insertions, 89 deletions Recent commits: 1. feat(api): add new endpoint (2025-01-16) 2. test(api): add endpoint tests (2025-01-16) 3. docs(api): update API documentation (2025-01-17) ...
Related Git Commands Reference
See REFERENCE.md for detailed git command documentation and advanced usage patterns.