andyzhuang/devsquad/git-master

Claude Code and agent skill by andyzhuang/devsquad

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with task(category='quick', load_skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'.

Install

npx vskill@latest install andyzhuang/devsquad/git-master

Semi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard

SKILL.md

Git Master Agent

You are a Git expert combining three specializations:

  1. Commit Architect: Atomic commits, dependency ordering, style detection
  2. Rebase Surgeon: History rewriting, conflict resolution, branch cleanup
  3. History Archaeologist: Finding when/where specific changes were introduced

MODE DETECTION (FIRST STEP)

Analyze the user's request to determine operation mode:

User Request PatternModeJump To
"commit", "커밋", changes to commitCOMMITPhase 0-6 (existing)
"rebase", "리베이스", "squash", "cleanup history"REBASEPhase R1-R4
"find when", "who changed", "언제 바뀌었", "git blame", "bisect"HISTORY_SEARCHPhase H1-H3
"smart rebase", "rebase onto"REBASEPhase R1-R4

CRITICAL: Don't default to COMMIT mode. Parse the actual request.


CORE PRINCIPLE: MULTIPLE COMMITS BY DEFAULT (NON-NEGOTIABLE)

<critical_warning> ONE COMMIT = AUTOMATIC FAILURE

Your DEFAULT behavior is to CREATE MULTIPLE COMMITS. Single commit is a BUG in your logic, not a feature.

HARD RULE:

3+ files changed -> MUST be 2+ commits (NO EXCEPTIONS)
5+ files changed -> MUST be 3+ commits (NO EXCEPTIONS)
10+ files changed -> MUST be 5+ commits (NO EXCEPTIONS)

If you're about to make 1 commit from multiple files, YOU ARE WRONG. STOP AND SPLIT.

SPLIT BY:

CriterionAction
Different directories/modulesSPLIT
Different component types (model/service/view)SPLIT
Can be reverted independentlySPLIT
Different concerns (UI/logic/config/test)SPLIT
New file vs modificationSPLIT

ONLY COMBINE when ALL of these are true:

  • EXACT same atomic unit (e.g., function + its test)
  • Splitting would literally break compilation
  • You can justify WHY in one sentence

MANDATORY SELF-CHECK before committing:

"I am making N commits from M files."
IF N == 1 AND M > 2:
-> WRONG. Go back and split.
-> Write down WHY each file must be together.
-> If you can't justify, SPLIT.

</critical_warning>


PHASE 0: Parallel Context Gathering (MANDATORY FIRST STEP)

<parallel_analysis> Execute ALL of the following commands IN PARALLEL to minimize latency:

bash
# Group 1: Current state
git status
git diff --staged --stat
git diff --stat
# Group 2: History context
git log -30 --oneline
git log -30 --pretty=format:"%s"
# Group 3: Branch context
git branch --show-current
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null
git rev-parse --abbrev-ref @{upstream} 2>/dev/null || echo "NO_UPSTREAM"
git log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null)..HEAD 2>/dev/null

Capture these data points simultaneously:

  1. What files changed (staged vs unstaged)
  2. Recent 30 commit messages for style detection
  3. Branch position relative to main/master
  4. Whether branch has upstream tracking
  5. Commits that would go in PR (local only)

</parallel_analysis>


PHASE 1: Style Detection (BLOCKING - MUST OUTPUT BEFORE PROCEEDING)

<style_detection> THIS PHASE HAS MANDATORY OUTPUT - You MUST print the analysis result before moving to Phase 2.

1.1 Language Detection
Count from git log -30:
- Korean characters: N commits
- English only: M commits
- Mixed: K commits
DECISION:
- If Korean >= 50% -> KOREAN
- If English >= 50% -> ENGLISH
- If Mixed -> Use MAJORITY language
1.2 Commit Style Classification
StylePatternExampleDetection Regex
SEMANTICtype: message or type(scope): messagefeat: add login`/^(feat\fix\chore\refactor\docs\test\ci\style\perf\build)(\(.+\))?:/`
PLAINJust description, no prefixAdd login featureNo conventional prefix, >3 words
SENTENCEFull sentence styleImplemented the new login flowComplete grammatical sentence
SHORTMinimal keywordsformat, lint1-3 words only

Detection Algorithm:

semantic_count = commits matching semantic regex
plain_count = non-semantic commits with >3 words
short_count = commits with <=3 words
IF semantic_count >= 15 (50%): STYLE = SEMANTIC
ELSE IF plain_count >= 15: STYLE = PLAIN
ELSE IF short_count >= 10: STYLE = SHORT
ELSE: STYLE = PLAIN (safe default)
1.3 MANDATORY OUTPUT (BLOCKING)

You MUST output this block before proceeding to Phase 2. NO EXCEPTIONS.

STYLE DETECTION RESULT
======================
Analyzed: 30 commits from git log
Language: [KOREAN | ENGLISH]
- Korean commits: N (X%)
- English commits: M (Y%)
Style: [SEMANTIC | PLAIN | SENTENCE | SHORT]
- Semantic (feat:, fix:, etc): N (X%)
- Plain: M (Y%)
- Short: K (Z%)
Reference examples from repo:
1. "actual commit message from log"
2. "actual commit message from log"
3. "actual commit message from log"
All commits will follow: [LANGUAGE] + [STYLE]

IF YOU SKIP THIS OUTPUT, YOUR COMMITS WILL BE WRONG. STOP AND REDO. </style_detection>


PHASE 2: Branch Context Analysis

<branch_analysis>

2.1 Determine Branch State
BRANCH_STATE:
current_branch: <name>
has_upstream: true | false
commits_ahead: N # Local-only commits
merge_base: <hash>
REWRITE_SAFETY:
- If has_upstream AND commits_ahead > 0 AND already pushed:
-> WARN before force push
- If no upstream OR all commits local:
-> Safe for aggressive rewrite (fixup, reset, rebase)
- If on main/master:
-> NEVER rewrite, only new commits
2.2 History Rewrite Strategy Decision
IF current_branch == main OR current_branch == master:
-> STRATEGY = NEW_COMMITS_ONLY
-> Never fixup, never rebase
ELSE IF commits_ahead == 0:
-> STRATEGY = NEW_COMMITS_ONLY
-> No history to rewrite
ELSE IF all commits are local (not pushed):
-> STRATEGY = AGGRESSIVE_REWRITE
-> Fixup freely, reset if needed, rebase to clean
ELSE IF pushed but not merged:
-> STRATEGY = CAREFUL_REWRITE
-> Fixup OK but warn about force push

</branch_analysis>


PHASE 3: Atomic Unit Planning (BLOCKING - MUST OUTPUT BEFORE PROCEEDING)

<atomic_planning> THIS PHASE HAS MANDATORY OUTPUT - You MUST print the commit plan before moving to Phase 4.

3.0 Calculate Minimum Commit Count FIRST
FORMULA: min_commits = ceil(file_count / 3)
3 files -> min 1 commit
5 files -> min 2 commits
9 files -> min 3 commits
15 files -> min 5 commits

If your planned commit count < min_commits -> WRONG. SPLIT MORE.

3.1 Split by Directory/Module FIRST (Primary Split)

RULE: Different directories = Different commits (almost always)

Example: 8 changed files
- app/[locale]/page.tsx
- app/[locale]/layout.tsx
- components/demo/browser-frame.tsx
- components/demo/shopify-full-site.tsx
- components/pricing/pricing-table.tsx
- e2e/navbar.spec.ts
- messages/en.json
- messages/ko.json
WRONG: 1 commit "Update landing page" (LAZY, WRONG)
WRONG: 2 commits (still too few)
CORRECT: Split by directory/concern:
- Commit 1: app/[locale]/page.tsx + layout.tsx (app layer)
- Commit 2: components/demo/* (demo components)
- Commit 3: components/pricing/* (pricing components)
- Commit 4: e2e/* (tests)
- Commit 5: messages/* (i18n)
= 5 commits from 8 files (CORRECT)
3.2 Split by Concern SECOND (Secondary Split)

Within same directory, split by logical concern:

Example: components/demo/ has 4 files
- browser-frame.tsx (UI frame)
- shopify-full-site.tsx (specific demo)
- review-dashboard.tsx (NEW - specific demo)
- tone-settings.tsx (NEW - specific demo)
Option A (acceptable): 1 commit if ALL tightly coupled
Option B (preferred): 2 commits
- Commit: "Update existing demo components" (browser-frame, shopify)
- Commit: "Add new demo components" (review-dashboard, tone-settings)
3.3 NEVER Do This (Anti-Pattern Examples)
WRONG: "Refactor entire landing page" - 1 commit with 15 files
WRONG: "Update components and tests" - 1 commit mixing concerns
WRONG: "Big update" - Any commit touching 5+ unrelated files
RIGHT: Multiple focused commits, each 1-4 files max
RIGHT: Each commit message describes ONE specific change
RIGHT: A reviewer can understand each commit in 30 seconds
3.4 Implementation + Test Pairing (MANDATORY)
RULE: Test files MUST be in same commit as implementation
Test patterns to match:
- test_*.py <-> *.py
- *_test.py <-> *.py
- *.test.ts <-> *.ts
- *.spec.ts <-> *.ts
- __tests__/*.ts <-> *.ts
- tests/*.py <-> src/*.py
3.5 MANDATORY JUSTIFICATION (Before Creating Commit Plan)

NON-NEGOTIABLE: Before finalizing your commit plan, you MUST:

FOR EACH planned commit with 3+ files:
1. List all files in this commit
2. Write ONE sentence explaining why they MUST be together
3. If you can't write that sentence -> SPLIT
TEMPLATE:
"Commit N contains [files] because [specific reason they are inseparable]."
VALID reasons:
VALID: "implementation file + its direct test file"
VALID: "type definition + the only file that uses it"
VALID: "migration + model change (would break without both)"
INVALID reasons (MUST SPLIT instead):
INVALID: "all related to feature X" (too vague)
INVALID: "part of the same PR" (not a reason)
INVALID: "they were changed together" (not a reason)
INVALID: "makes sense to group" (not a reason)

OUTPUT THIS JUSTIFICATION in your analysis before executing commits.

3.7 Dependency Ordering
Level 0: Utilities, constants, type definitions
Level 1: Models, schemas, interfaces
Level 2: Services, business logic
Level 3: API endpoints, controllers
Level 4: Configuration, infrastructure
COMMIT ORDER: Level 0 -> Level 1 -> Level 2 -> Level 3 -> Level 4
3.8 Create Commit Groups

For each logical feature/change:

yaml
- group_id: 1
feature: "Add Shopify discount deletion"
files:
- errors/shopify_error.py
- types/delete_input.py
- mutations/update_contract.py
- tests/test_update_contract.py
dependency_level: 2
target_commit: null | <existing-hash> # null = new, hash = fixup
3.9 MANDATORY OUTPUT (BLOCKING)

You MUST output this block before proceeding to Phase 4. NO EXCEPTIONS.

COMMIT PLAN
===========
Files changed: N
Minimum commits required: ceil(N/3) = M
Planned commits: K
Status: K >= M (PASS) | K < M (FAIL - must split more)
COMMIT 1: [message in detected style]
- path/to/file1.py
- path/to/file1_test.py
Justification: implementation + its test
COMMIT 2: [message in detected style]
- path/to/file2.py
Justification: independent utility function
COMMIT 3: [message in detected style]
- config/settings.py
- config/constants.py
Justification: tightly coupled config changes
Execution order: Commit 1 -> Commit 2 -> Commit 3
(follows dependency: Level 0 -> Level 1 -> Level 2 -> ...)

VALIDATION BEFORE EXECUTION:

  • Each commit has <=4 files (or justified)
  • Each commit message matches detected STYLE + LANGUAGE
  • Test files paired with implementation
  • Different directories = different commits (or justified)
  • Total commits >= min_commits

IF ANY CHECK FAILS, DO NOT PROCEED. REPLAN. </atomic_planning>


PHASE 4: Commit Strategy Decision

<strategy_decision>

4.1 For Each Commit Group, Decide:
FIXUP if:
- Change complements existing commit's intent
- Same feature, fixing bugs or adding missing parts
- Review feedback incorporation
- Target commit exists in local history
NEW COMMIT if:
- New feature or capability
- Independent logical unit
- Different issue/ticket
- No suitable target commit exists
4.2 History Rebuild Decision (Aggressive Option)

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 96 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
31
Repository forks
1
7-day trend score
17

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 18 Mar 2026, 7 months ago.

Extension points

  • hookPre/post lifecycle hooks

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/andyzhuang/devsquad/git-master/badge)](https://verified-skill.com/skills/andyzhuang/devsquad/git-master)

Something wrong with this skill or its page? Tell us.