git
Git repository operations - status, diff, commit, branch, log. Converted from MCP server for 90%+ context savings.
When & Why to Use This Skill
This Git skill enables Claude to perform comprehensive local version control management directly within the chat interface. It supports essential operations such as checking repository status, staging files, committing changes, and managing branches. Optimized for performance, it offers up to 98% context savings compared to standard MCP implementations, making it a highly efficient tool for developers to maintain code integrity and history.
Use Cases
- Streamlining the development workflow by staging and committing code changes with conventional commit messages without leaving the conversation.
- Reviewing code history and inspecting specific differences between branches or commits to debug issues or understand project evolution.
- Managing feature development by creating, switching, and listing branches to maintain a clean and organized repository structure.
- Performing repository audits and status checks to ensure all modifications are accounted for before finalizing a release or pull request.
| name | git |
|---|---|
| description | Git repository operations - status, diff, commit, branch, log. Converted from MCP server for 90%+ context savings. |
| context | fork: true |
| allowed-tools | read, write, bash |
| version | 1.0 |
| error_handling | graceful |
| streaming | supported |
Git Skill
Overview
This skill provides comprehensive Git operations through a local MCP server. It enables version control management including status checking, staging, committing, branching, diffing, and history viewing.
Context Savings: ~98% reduction
- MCP Mode: ~25,000 tokens always loaded
- Skill Mode: ~500 tokens metadata + on-demand loading
When to Use
- Check repository status and see what files have changed
- Stage files for commit
- Create commits with messages
- View differences between commits, branches, or working tree
- Create and switch between branches
- View commit history with flexible filtering
- Inspect specific commits
- Reset staged changes
Quick Reference
# List available tools
python executor.py --list
# Check repository status
python executor.py --tool git_status --args '{"repo_path": "."}'
# View unstaged changes
python executor.py --tool git_diff_unstaged --args '{"repo_path": "."}'
# View staged changes
python executor.py --tool git_diff_staged --args '{"repo_path": "."}'
# Stage files
python executor.py --tool git_add --args '{"repo_path": ".", "files": ["file1.ts", "file2.ts"]}'
# Commit changes
python executor.py --tool git_commit --args '{"repo_path": ".", "message": "feat: add new feature"}'
# View commit log
python executor.py --tool git_log --args '{"repo_path": ".", "max_count": 10}'
# Create branch
python executor.py --tool git_create_branch --args '{"repo_path": ".", "branch_name": "feature/new-feature"}'
# Switch branch
python executor.py --tool git_checkout --args '{"repo_path": ".", "branch_name": "main"}'
Tools
git_status
Shows the working tree status - which files are modified, staged, or untracked.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
Example:
python executor.py --tool git_status --args '{"repo_path": "."}'
Returns:
On branch main
Changes not staged for commit:
modified: src/index.ts
Untracked files:
src/new-file.ts
git_diff_unstaged
Shows changes in the working directory that are not yet staged.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
repo_path |
string | Yes | - | Path to the git repository |
context_lines |
integer | No | 3 | Number of context lines around changes |
Example:
python executor.py --tool git_diff_unstaged --args '{"repo_path": ".", "context_lines": 5}'
Returns: Unified diff format showing line-by-line changes in unstaged files.
git_diff_staged
Shows changes that are staged for commit.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
repo_path |
string | Yes | - | Path to the git repository |
context_lines |
integer | No | 3 | Number of context lines around changes |
Example:
python executor.py --tool git_diff_staged --args '{"repo_path": "."}'
Returns: Unified diff format showing line-by-line changes in staged files.
git_diff
Shows differences between branches, commits, or other targets.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
repo_path |
string | Yes | - | Path to the git repository |
target |
string | Yes | - | Branch name, commit SHA, or diff target (e.g., "main", "HEAD~1") |
context_lines |
integer | No | 3 | Number of context lines around changes |
Example:
# Compare current branch to main
python executor.py --tool git_diff --args '{"repo_path": ".", "target": "main"}'
# Compare to previous commit
python executor.py --tool git_diff --args '{"repo_path": ".", "target": "HEAD~1"}'
# Compare two commits
python executor.py --tool git_diff --args '{"repo_path": ".", "target": "abc123..def456"}'
Returns: Unified diff format showing differences between current state and target.
git_add
Adds file contents to the staging area.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
files |
array | Yes | List of file paths to stage (relative to repo root) |
Example:
# Stage specific files
python executor.py --tool git_add --args '{"repo_path": ".", "files": ["src/index.ts", "README.md"]}'
# Stage all files (use "." in files array)
python executor.py --tool git_add --args '{"repo_path": ".", "files": ["."]}'
git_commit
Records changes to the repository with a commit message.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
message |
string | Yes | Commit message |
Example:
python executor.py --tool git_commit --args '{"repo_path": ".", "message": "feat: add user authentication"}'
Best Practices:
- Use conventional commit format:
type: description - Common types:
feat,fix,docs,refactor,test,chore - Keep first line under 72 characters
- Add detailed description in multi-line messages
git_reset
Unstages all staged changes (does not modify working directory).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
Example:
python executor.py --tool git_reset --args '{"repo_path": "."}'
Note: This is equivalent to git reset HEAD - it unstages files but preserves working directory changes.
git_log
Shows the commit logs with flexible filtering options.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
repo_path |
string | Yes | - | Path to the git repository |
max_count |
integer | No | 10 | Maximum number of commits to show |
start_timestamp |
string | No | null | Start timestamp for filtering commits |
end_timestamp |
string | No | null | End timestamp for filtering commits |
Timestamp Formats:
- ISO 8601:
"2024-01-15T14:30:25" - Relative:
"2 weeks ago","yesterday" - Absolute:
"2024-01-15","Jan 15 2024"
Example:
# Last 10 commits
python executor.py --tool git_log --args '{"repo_path": ".", "max_count": 10}'
# Last 20 commits
python executor.py --tool git_log --args '{"repo_path": ".", "max_count": 20}'
# Commits from last week
python executor.py --tool git_log --args '{"repo_path": ".", "start_timestamp": "1 week ago"}'
# Commits in date range
python executor.py --tool git_log --args '{"repo_path": ".", "start_timestamp": "2024-01-01", "end_timestamp": "2024-01-31"}'
Returns:
commit abc123def456...
Author: Name <email@example.com>
Date: Mon Jan 15 14:30:25 2024
feat: add new feature
git_create_branch
Creates a new branch from an optional base branch.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
repo_path |
string | Yes | - | Path to the git repository |
branch_name |
string | Yes | - | Name for the new branch |
base_branch |
string | No | null | Branch to create from (defaults to current branch) |
Example:
# Create branch from current branch
python executor.py --tool git_create_branch --args '{"repo_path": ".", "branch_name": "feature/new-feature"}'
# Create branch from specific base
python executor.py --tool git_create_branch --args '{"repo_path": ".", "branch_name": "feature/new-feature", "base_branch": "main"}'
git_checkout
Switches branches.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
branch_name |
string | Yes | Name of branch to switch to |
Example:
python executor.py --tool git_checkout --args '{"repo_path": ".", "branch_name": "main"}'
Note: Branch must already exist. Use git_create_branch to create a new branch.
git_show
Shows the contents of a specific commit.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
revision |
string | Yes | Commit SHA, branch name, or revision (e.g., "HEAD", "HEAD~1", "abc123") |
Example:
# Show latest commit
python executor.py --tool git_show --args '{"repo_path": ".", "revision": "HEAD"}'
# Show specific commit
python executor.py --tool git_show --args '{"repo_path": ".", "revision": "abc123def456"}'
# Show commit 2 commits ago
python executor.py --tool git_show --args '{"repo_path": ".", "revision": "HEAD~2"}'
Returns: Commit metadata (author, date, message) and full diff of changes.
git_branch
List Git branches with filtering options.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
repo_path |
string | Yes | Path to the git repository |
branch_type |
string | Yes | Type of branches to list: "local", "remote", or "all" |
contains |
string | No | Only list branches containing this commit SHA |
not_contains |
string | No | Only list branches NOT containing this commit SHA |
Example:
# List local branches
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "local"}'
# List remote branches
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "remote"}'
# List all branches
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "all"}'
# List branches containing a commit
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "local", "contains": "abc123"}'
# List branches NOT containing a commit
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "local", "not_contains": "abc123"}'
Returns:
* main
feature/new-feature
develop
Common Workflows
Check Status and Commit Changes
# 1. Check what files have changed
python executor.py --tool git_status --args '{"repo_path": "."}'
# 2. View unstaged changes
python executor.py --tool git_diff_unstaged --args '{"repo_path": "."}'
# 3. Stage specific files
python executor.py --tool git_add --args '{"repo_path": ".", "files": ["src/index.ts", "README.md"]}'
# 4. View staged changes
python executor.py --tool git_diff_staged --args '{"repo_path": "."}'
# 5. Commit with message
python executor.py --tool git_commit --args '{"repo_path": ".", "message": "feat: add new feature"}'
Create Feature Branch
# 1. Check current branch
python executor.py --tool git_status --args '{"repo_path": "."}'
# 2. Create new branch from main
python executor.py --tool git_create_branch --args '{"repo_path": ".", "branch_name": "feature/new-feature", "base_branch": "main"}'
# 3. Switch to new branch
python executor.py --tool git_checkout --args '{"repo_path": ".", "branch_name": "feature/new-feature"}'
# 4. Make changes and commit
# ... (stage and commit as above)
View History
# 1. View recent commits
python executor.py --tool git_log --args '{"repo_path": ".", "max_count": 10}'
# 2. Inspect specific commit
python executor.py --tool git_show --args '{"repo_path": ".", "revision": "abc123"}'
# 3. Compare to another branch
python executor.py --tool git_diff --args '{"repo_path": ".", "target": "main"}'
Branch Management
# 1. List all branches
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "all"}'
# 2. Check which branches contain a commit
python executor.py --tool git_branch --args '{"repo_path": ".", "branch_type": "local", "contains": "abc123"}'
# 3. Switch to different branch
python executor.py --tool git_checkout --args '{"repo_path": ".", "branch_name": "develop"}'
Reset Staged Changes
# 1. Check what's staged
python executor.py --tool git_diff_staged --args '{"repo_path": "."}'
# 2. Unstage all files
python executor.py --tool git_reset --args '{"repo_path": "."}'
# 3. Verify reset
python executor.py --tool git_status --args '{"repo_path": "."}'
Best Practices
Commit Messages
Use Conventional Commits:
type: descriptionfeat: New featurefix: Bug fixdocs: Documentation changesrefactor: Code refactoringtest: Adding/updating testschore: Maintenance tasks
Keep it concise: First line under 72 characters
Be descriptive: Explain what and why, not how
Workflow
- Always check status first: Know what you're committing
- Review diffs before committing: Use
git_diff_staged - Stage selectively: Don't use
git add .blindly - Commit frequently: Small, focused commits are better
- Use branches: Create feature branches for new work
Branch Naming
feature/description- New featuresfix/description- Bug fixesrefactor/description- Code refactoringdocs/description- Documentation updates
Configuration
MCP server configuration stored in config.json:
- Command:
python - Args:
["-m", "mcp_server_git"]
Requirements
- Python with
mcp_server_gitpackage installed - Valid git repository at
repo_path
Error Handling
Common Issues:
- Not a git repository: Ensure
repo_pathpoints to a valid git repo - Nothing to commit: Check status first, stage files before committing
- Merge conflicts: Resolve conflicts before committing
- Branch already exists: Use unique branch names or checkout existing branch
Recovery:
- Check repository status with
git_status - Use
git_resetto unstage if needed - Review logs with
git_logto understand repository state - Verify branch exists with
git_branchbefore checkout
Integration
With GitHub Skill
This skill works alongside the github skill:
- git: Local repository operations
- github: Remote GitHub operations (PRs, issues, etc.)
With Workflows
Common workflow integration:
- Use
git_statusto check changes - Use
git_diff_stagedto review before commit - Use
git_committo commit changes - Use
githubskill to create PR
Related
- Original MCP server:
python -m mcp_server_git - GitHub Skill:
.claude/skills/github/ - MCP Converter Skill:
.claude/skills/mcp-converter/ - Skill Manager:
.claude/skills/skill-manager/