| name | git-ops |
| description | Get information about the state of a git repo, get diffs, make commits, make PRs, etc.. Use this skill when the user needs to accomplish git tasks. |
| allowed-tools | Bash(git:*), Bash(ls:*), Bash(pwd), Bash(gh:*) |
Git Operations Skill
This skill provides comprehensive git repository information for commits, PRs, and general repository status.
Important: User Confirmation Required
ALWAYS ask for user confirmation before:
- Creating commits (
git commit) - Pushing to remote (
git push) - Creating pull requests (which includes pushing)
Use the AskUserQuestion tool to present the proposed action and get explicit approval before executing.
These operations can be performed without confirmation:
- Reading repository status (
git status,git diff,git log, etc.) - Staging files (
git add) - Creating/switching branches (
git branch,git checkout) - Fetching from remote (
git fetch) - All other read-only or local-only git operations
Instructions
Follow these steps to gather and present git information:
1. Basic Repository Status
git status
This shows:
- Current branch name
- Tracking status (ahead/behind remote)
- Staged files (green)
- Unstaged files (red)
- Untracked files
2. Staged Changes (Ready for Commit)
git diff --cached --stat
Shows statistics of staged files.
git diff --cached
Shows full diff of what would be committed.
Present: Summarize the number of staged files and the nature of changes.
3. Unstaged Changes (Modified but Not Staged)
git diff --stat
Shows statistics of modified but unstaged files.
git diff
Shows full diff of unstaged changes.
Present: List files with unstaged modifications.
4. Creating Commits
When the user asks to create a commit:
Gather information about changes:
- Check what files would be committed
- Review the diffs to understand the changes
- Check recent commit history for message style:
git log --oneline -10
Draft commit message based on recent history style:
- Keep it 1-2 sentences maximum
- Focus on "why" not "what"
- Follow the repository's commit message style
Ask for confirmation using AskUserQuestion tool:
- Present the proposed commit message
- Show what files will be committed
- Warn about sensitive files (.env, credentials.json, etc.) if present
- Ask user to approve, modify, or cancel
If approved, create the commit:
- If user said "commit all" or similar: stage everything with
git add .first - Otherwise only commit staged changes
- Create the commit:
git commit -m "Your concise commit message"
- If user said "commit all" or similar: stage everything with
Important rules:
- ALWAYS ask for confirmation before committing using the AskUserQuestion tool
- ALWAYS create NEW commits, NEVER use
--amend - If nothing staged and not staging all, inform user (don't create empty commit)
- User must explicitly approve the commit before executing it
5. Recent Commit History
git log --oneline -10
Shows last 10 commits for context on commit message style.
6. Branch Comparison (For PR Context)
Show changes since branching:
git diff main...HEAD --stat
Statistics of all changes from base branch.
git log main..HEAD --oneline
All commits that would be in a PR.
git diff main...HEAD
Full diff for PR review (use sparingly, can be large).
7. Remote Status
git rev-list --left-right --count HEAD...@{upstream} 2>/dev/null || echo "No upstream configured"
Shows how many commits ahead/behind the remote.
8. Creating Pull Requests with gh CLI
When the user asks to create a PR, follow these steps:
- Verify branch status:
git branch --show-current
git status
- If on main/master, warn user and don't create PR
- Check if branch needs to be pushed
- Understand the full scope of changes from when the branch diverged:
git log origin/main...HEAD --oneline
git diff origin/main...HEAD --stat
git diff origin/main
- If no commits ahead of default branch, inform user
Draft PR title and description based on all changes:
- Analyze ALL commits and the full diff, not just the latest commit
- Draft a concise title (50 chars or less)
- Create a detailed summary with:
- What was changed and why
- Major changes as bullet points
- Focus on "why" and user impact
Ask for confirmation using AskUserQuestion tool:
- Present the proposed PR title and description
- Show summary of files changed and commits included
- Confirm that user wants to push (if needed) and create PR
- Allow user to approve, modify, or cancel
If approved, push to remote if needed:
git push -u origin $(git branch --show-current)
- Create PR with
ghCLI:
gh pr create --title "Concise title (50 chars or less)" --body "$(cat <<'EOF'
## Summary
Detailed explanation of the major changes, what was modified, and why.
Analyze ALL commits and the full diff, not just the latest commit.
- Major change 1
- Major change 2
- etc.
Focus on the "why" and user impact, not just the "what".
EOF
)"
- Return the PR URL when done
Important notes:
- ALWAYS ask for confirmation before pushing and creating PR using the AskUserQuestion tool
- Analyze ALL commits that will be included, not just the latest one
- Use HEREDOC format for the body to ensure proper formatting
- Do NOT use the Task or TodoWrite tools when creating PRs
- Adapt base branch name (try
main,master,origin/main, etc.) - User must explicitly approve before pushing to remote
Presenting Information
Organize your response based on what the user needs:
For Commit Questions
- Staged files: List files ready to commit with brief summary
- Commit message suggestion: Based on changes and recent history
- Warnings: Flag any concerns (large files, potential secrets)
For PR Questions
- Branch comparison: Summarize all changes since base branch
- Commit list: Show commits that would be included
- Files changed: List all modified files with stats
- Create PR: Use
gh pr createto create the PR with appropriate title and description - PR description template: If only describing, suggest title and description
For General Status
- Current state: Branch name, tracking status
- Staged vs unstaged: Clear breakdown of what's where
- Next steps: Actionable suggestions
Best Practices
- Be concise: The user is experienced, provide summaries not explanations
- Adapt base branch: Try
main,master,developas needed - Handle errors gracefully: Not all repos have remotes or follow conventions
- Skip noise: Ignore lock files, build artifacts in summaries
- Security awareness: Flag potential secrets or sensitive files
Examples
Example 1: Commit message for staged changes
User: "Write a commit message"
git diff --cached --stat
git diff --cached
git log --oneline -10
Response:
Staged: 3 files (parser.py, test_parser.py, README.md)
Suggested commit message:
"Add config parser with tests and documentation"
Example 2: Commit message for unstaged changes
User: "Commit my changes"
git status
git diff --stat
git diff
git log --oneline -10
Draft commit message based on changes, then ask for confirmation:
- Use AskUserQuestion to present: "Add config parser with tests"
- Show files that will be committed
- After approval, stage and commit:
git add -u
git commit -m "Add config parser with tests"
Example 3: PR description for branch
User: "Write a PR description"
git log main..HEAD --oneline
git diff main...HEAD --stat
git diff main...HEAD
Response:
**Add configuration parser with validation**
Implements config parsing and validation system.
- Added parse_config() for YAML/JSON parsing
- Added validate_config() with schema validation
- Full test coverage for both modules
- Updated docs with examples
6 files changed: +365 -8