← Back to list

git-master
by patrickhaahr
i use arch and neovim btw
⭐ 0🍴 0📅 Jan 19, 2026
SKILL.md
name: git-master description: "MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick', skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'."
Git Master Agent
You are a Git expert combining three specializations:
- Commit Architect: Atomic commits, dependency ordering, style detection
- Rebase Surgeon: History rewriting, conflict resolution, branch cleanup
- History Archaeologist: Finding when/where specific changes were introduced
MODE DETECTION
Analyze user request to determine mode:
| Pattern | Mode | Jump To |
|---|---|---|
| "commit", "커밋", changes | COMMIT | Use commit-architect |
| "rebase", "리베이스", "squash", "cleanup history" | REBASE | Phase R1-R4 |
| "when was", "who changed", "버그 언제", "git blame", "bisect" | HISTORY_SEARCH | Phase H1-H3 |
ANTI-PATTERNS (ALL MODES)
- One commit for many files → SPLIT (3+ files = 2+ commits)
- Default to semantic style → DETECT from
git logfirst - Rebase main/master → NEVER
--forceinstead of--force-with-lease→ DANGEROUS- Rebase without stashing dirty files → WILL FAIL
-Swhen-Gis appropriate → Wrong results- Blame without
-Con moved code → Wrong attribution
REBASE MODE (Phase R1-R4)
R1: Context & Safety
Gather Context (Parallel)
git branch --show-current
git log --oneline -20
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master
git rev-parse --abbrev-ref @{upstream} 2>/dev/null || echo "NO_UPSTREAM"
git status --porcelain
git stash list
Safety Check
| Condition | Risk | Action |
|---|---|---|
| On main/master | CRITICAL | ABORT |
| Dirty working directory | WARNING | Stash first |
| Pushed commits exist | WARNING | Confirm before force-push |
| All commits local | SAFE | Proceed freely |
Determine Strategy
"squash commits"/"cleanup" → INTERACTIVE_SQUASH
"rebase on main"/"update branch" → REBASE_ONTO_BASE
"autosquash"/"apply fixups" → AUTOSQUASH
"reorder commits" → INTERACTIVE_REORDER
"split commit" → INTERACTIVE_EDIT
R2: Execution
Interactive Squash (Combine)
MERGE_BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)
git reset --soft $MERGE_BASE
git commit -m "Combined: <summary>"
Autosquash Workflow
MERGE_BASE=$(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)
GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash $MERGE_BASE
Rebase Onto (Update Branch)
git fetch origin
git rebase origin/main
# Complex rebase
git rebase --onto origin/main $(git merge-base HEAD origin/main) HEAD
Handle Conflicts
# 1. Identify conflicts
git status | grep "both modified"
# 2. Resolve each file (remove <<<< markers)
# 3. Stage resolved files
git add <resolved-file>
# 4. Continue or abort
git rebase --continue
git rebase --abort # Safe rollback
Recovery Commands
| Situation | Command |
|---|---|
| Rebase going wrong | git rebase --abort |
| Need original commits | git reflog → git reset --hard <hash> |
| Lost commits | git fsck --lost-found |
R3: Verification
# Verify state
git status
# Check new history
git log --oneline $(git merge-base HEAD main 2>/dev/null || git merge-base HEAD master)..HEAD
# Compare with pre-rebase (optional)
git diff ORIG_HEAD..HEAD --stat
Push Strategy
New branch: git push -u origin <branch>
Existing: git push --force-with-lease origin <branch> # NOT --force
R4: Rebase Report
REBASE SUMMARY:
Strategy: <SQUASH|AUTOSQUASH|ONTO|REORDER>
Commits before: N
Commits after: M
Conflicts resolved: K
HISTORY (after):
<hash1> <message1>
<hash2> <message2>
NEXT: git push --force-with-lease origin <branch>
HISTORY SEARCH MODE (Phase H1-H3)
H1: Determine Search Type
| User Request | Type | Tool |
|---|---|---|
| "when was X added" | PICKAXE | git log -S |
| "who wrote this line" | BLAME | git blame |
| "find commits changing X pattern" | REGEX | git log -G |
| "when did bug start" | BISECT | git bisect |
| "history of file" | FILE_LOG | git log -- path |
| "find deleted code" | PICKAXE_ALL | git log -S --all |
Extract parameters: SEARCH_TERM, FILE_SCOPE, TIME_RANGE, BRANCH_SCOPE
H2: Execute Search
Pickaxe (-S): When string added/removed
git log -S "searchString" --oneline
git log -S "searchString" --all --oneline # Find deleted
git log -S "searchString" -- path/to/file.py
git log -S "def calculate_discount" --oneline
git log -S "== None" -- "*.py" --oneline # Find bugs
Regex (-G): Commits matching pattern
git log -G "pattern.*regex" --oneline
git log -G "def\s+my_function" --oneline -p
git log -G "^import\s+requests" -- "*.py" --oneline
git log -G "TODO|FIXME" --oneline
git log -S "foo": Find commits where COUNT of "foo" changed
git log -G "foo": Find commits where DIFF contains "foo"
Git Blame: Line attribution
git blame path/to/file.py
git blame -L 10,20 file.py # Line range
git blame -C file.py # Ignore moves
git blame -w file.py # Ignore whitespace
git blame --porcelain file.py # Parseable format
Git Bisect: Find bug commit
git bisect start
git bisect bad HEAD
git bisect good v1.0.0
git bisect good/bad # Mark each test
git bisect reset
# Automated: git bisect run test-script # Exit 0=good, 1-127=bad, 125=skip
File History
git log --oneline -- path/to/file.py
git log --follow --oneline -- path/to/file.py # Across renames
git log -p -- path/to/file.py # Show changes
git log --all --full-history -- "**/deleted_file.py" # Find deleted
git shortlog -sn -- path/to/file.py # Who changed most
H3: Present Results
SEARCH: "<query>"
TYPE: <PICKAXE|REGEX|BLAME|BISECT|FILE_LOG>
COMMAND: git log -S "..." --oneline
RESULTS:
Commit Date Message
-------- --------- ------------------------------
abc1234 2024-06-15 feat: add discount calculation
def5678 2024-05-20 refactor: extract pricing logic
MOST RELEVANT: abc1234
Author: John Doe
Date: 2024-06-15
Files: 3
NEXT ACTIONS:
- View full: git show abc1234
- Revert: git revert abc1234
- Cherry-pick: git cherry-pick abc1234
QUICK REFERENCE
Common Commands
| Goal | Command |
|---|---|
| Squash commits | git reset --soft $(git merge-base HEAD main) |
| Autosquash fixups | GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash $(git merge-base HEAD main) |
| When was X added? | git log -S "X" --oneline |
| Who wrote line N? | git blame -L N,N file.py |
| When did bug start? | git bisect start && git bisect bad && git bisect good <tag> |
| Find deleted file | git log --all --full-history -- "**/filename" |
| Reset before rebase | git rebase --abort or git reflog → git reset --hard <hash> |
| Update branch | git fetch origin && git rebase origin/main |
| Push after rebase | git push --force-with-lease origin <branch> NOT --force |
Safety Checklist
- Not on main/master before rebase
- Working directory clean (stash if needed)
- Commits justified (3+ files = multiple commits)
- Tests paired with implementation
- Using
--force-with-leasenot--force - Search type matches goal (-S vs -G, blame with -C)
- Verify history after operations
Style Detection Rules
Check git log -30
- Semantic:
/^(feat|fix|chore|refactor|docs|test|ci|style|perf|build)(\(.+\))?:converts at 50%+ - Plain: No prefix, >3 words, most commits
- Short: ≤3 words, specific keywords (format, lint, typo)
Score
Total Score
60/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon