Git Workflow
Git operations assistant. Lightweight, high-frequency tool for commit messages, PR descriptions, branch strategy, conflict resolution, code archaeology, and bisect debugging.
Scope: Git workflow operations only. NOT for code review (review), CI/CD pipelines (devops-engineer), changelogs or release notes (changelog-writer), or writing application code.
Dispatch
| $ARGUMENTS |
Mode |
commit |
Generate conventional commit message from staged diff |
pr |
Generate PR description from branch diff |
strategy |
Recommend branch strategy for project |
conflict |
Guide merge conflict resolution |
archaeology <file or function> |
Analyze git history for code understanding |
bisect |
Assist with git bisect to find regression commits |
| Empty |
Show mode menu with examples |
Canonical Vocabulary
Use these terms exactly throughout all modes:
| Term |
Definition |
| conventional commit |
Structured commit format: type(scope): subject per Conventional Commits 1.0 |
| commit type |
One of: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert |
| breaking change |
Commit with ! suffix or BREAKING CHANGE: footer requiring major version bump |
| scope |
Optional parenthesized component name after type: feat(auth): ... |
| trunk-based |
Strategy where all developers commit to main/trunk with short-lived feature branches |
| git-flow |
Strategy with develop, feature, release, and hotfix branches |
| github-flow |
Simplified strategy: main + feature branches with PR-based merging |
| conflict marker |
Git-inserted <<<<<<<, =======, >>>>>>> delimiters in conflicted files |
| blame |
git blame annotation showing last modifier per line |
| archaeology |
Using git history commands to understand why code exists |
| bisect |
Binary search through commits to find the one introducing a bug |
| good/bad commit |
Bisect terminology: good = before bug, bad = after bug |
Mode 1: Commit
Generate a conventional commit message from the current staged diff.
Commit Steps
- Run
git diff --cached to get staged changes
- If nothing staged, run
git diff and report: "No staged changes. Stage files first with git add."
- Run
uv run python scripts/diff-summarizer.py on the diff output
- Analyze the diff to determine:
- Type: feat/fix/docs/style/refactor/perf/test/build/ci/chore/revert
- Scope: affected component (from file paths, module names)
- Subject: imperative, lowercase, no period, max 72 chars
- Body: what changed and why (wrap at 72 chars)
- Breaking: whether
BREAKING CHANGE: footer is needed
- Reference
data/conventional-commits.json rules for type selection
- Present the commit message. Ask: "Commit with this message? [yes / edit / cancel]"
- If approved, run
git commit -m "$(cat <<'EOF'\n<message>\nEOF\n)"
Mode 2: PR
Generate a PR description from the branch diff against the base branch.
PR Steps
- Detect base branch:
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@refs/remotes/origin/@@' (fallback: main)
- Run
git log --oneline <base>..HEAD to list commits
- Run
uv run python scripts/commit-parser.py on git log output
- Run
git diff <base>...HEAD --stat for change statistics
- Run
uv run python scripts/diff-summarizer.py on the diff stat
- Generate PR description with:
- Title: short summary under 70 chars
- Summary: 1-3 bullet points of what changed
- Changes: grouped by commit type from parsed commits
- Test plan: checklist of verification steps
- Breaking changes: if any commits have breaking changes
- Present the description. Ask: "Create PR with this? [yes / edit / skip]"
Mode 3: Strategy
Recommend a branch strategy for the project.
Strategy Steps
- Analyze the repository:
- Team size: check
git shortlog -sn --all | wc -l
- Release cadence: check tags with
git tag -l --sort=-creatordate | head -20
- Branch count:
git branch -r | wc -l
- CI/CD presence: check for
.github/workflows/, Jenkinsfile, .gitlab-ci.yml
- Reference
data/branch-strategies.json for strategy comparison
- Score each strategy against the project profile
- Present recommendation with:
- Recommended strategy and why
- Comparison table showing trade-offs
- Migration steps if switching from current approach
- Team size and release cadence alignment
Mode 4: Conflict
Guide merge conflict resolution.
Conflict Steps
- Run
git diff --name-only --diff-filter=U to list conflicted files
- If no conflicts: "No merge conflicts detected."
- For each conflicted file:
- Read the file to identify conflict markers
- Analyze both sides (ours vs theirs)
- Check
git log --merge -p -- <file> for context on diverging changes
- Determine the intent of each side
- Present resolution guidance per file:
- What each side changed and why
- Recommended resolution (keep ours / keep theirs / merge both / rewrite)
- The resolved content
- Ask: "Apply this resolution? [yes / edit / skip per file]"
- After resolving: remind to
git add <files> and continue the merge/rebase
Mode 5: Archaeology
Analyze git history to understand why code exists and how it evolved.
Archaeology Steps
- Parse
$ARGUMENTS[1] as a file path or function name
- For file paths:
git log --follow --oneline -- <file> for full history
git log --follow --diff-filter=A -- <file> for creation commit
git blame <file> for line-by-line attribution
- For function names:
git log -p --all -S '<function>' -- '*.py' '*.js' '*.ts' (pickaxe search)
git log -L :<function>:<file> if file is known (function-level log)
- Analyze the history to answer:
- When was this code introduced and by whom?
- What was the original intent? (from commit messages)
- How has it evolved? (key modification commits)
- Are there related changes in other files?
- Present a narrative timeline with key commits and their context
Mode 6: Bisect
Assist with git bisect to find the commit that introduced a regression.
Bisect Steps
- Ask for (if not provided):
- Bad commit: where the bug exists (default: HEAD)
- Good commit: where the bug did not exist
- Test command: how to verify (optional, for
git bisect run)
- Start bisect:
git bisect start <bad> <good>
- If test command provided:
- Run
git bisect run <command>
- Parse output for the first bad commit
- If manual:
- At each step, explain the current commit context
- Ask: "Is this commit good or bad?"
- Run
git bisect good or git bisect bad
- When bisect identifies the commit:
- Show the full commit with
git show <hash>
- Explain what the commit changed
- Suggest investigation areas
- Clean up:
git bisect reset
Reference Files
Load ONE reference at a time. Do not preload all references into context.
| File |
Content |
Load When |
references/commit-and-pr-guide.md |
Conventional commit patterns, PR templates, diff analysis |
commit or pr mode |
references/branch-strategies.md |
Strategy comparison, migration paths, team sizing |
strategy mode |
references/history-and-debugging.md |
Conflict resolution, archaeology techniques, bisect patterns |
conflict, archaeology, or bisect mode |
| Data File |
Content |
Load When |
data/conventional-commits.json |
Full spec as structured data with type definitions |
commit mode (script input) |
data/branch-strategies.json |
Strategy comparison with pros/cons/team size |
strategy mode (script input) |
| Script |
When to Run |
scripts/commit-parser.py |
pr mode -- parse git log into structured JSON |
scripts/diff-summarizer.py |
commit or pr mode -- summarize diff statistics |
Critical Rules
- Never commit without user approval -- always present the message first
- Never force-push, reset --hard, or run destructive git commands
- Always use conventional commit format per the spec in data/conventional-commits.json
- Commit subjects must be imperative, lowercase, no period, max 72 chars
- PR descriptions must link changes to evidence from the diff
- Never skip
git bisect reset after a bisect session
- Archaeology mode is read-only -- never modify code or history
- Conflict resolution must explain both sides before recommending
- Branch strategy must consider actual team size and release cadence, not ideals
- Scripts output JSON to stdout -- parse programmatically, never regex
- Stage-before-commit: if diff --cached is empty, do not fabricate a commit message
- Do not generate changelogs or release notes -- redirect to changelog-writer
1---2name: git-workflow3description: Git operations: conventional commits, PR descriptions, branch strategy, conflict resolution, code archaeology, bisect. Use for git workflow tasks. NOT for code review, CI/CD, or changelogs.4license: MIT5---6# Git Workflow78Git operations assistant. Lightweight, high-frequency tool for commit messages, PR descriptions, branch strategy, conflict resolution, code archaeology, and bisect debugging.910**Scope:** Git workflow operations only. NOT for code review (review), CI/CD pipelines (devops-engineer), changelogs or release notes (changelog-writer), or writing application code.1112## Dispatch1314| $ARGUMENTS | Mode |15|------------|------|16| `commit` | Generate conventional commit message from staged diff |17| `pr` | Generate PR description from branch diff |18| `strategy` | Recommend branch strategy for project |19| `conflict` | Guide merge conflict resolution |20| `archaeology <file or function>` | Analyze git history for code understanding |21| `bisect` | Assist with git bisect to find regression commits |22| Empty | Show mode menu with examples |2324## Canonical Vocabulary2526Use these terms exactly throughout all modes:2728| Term | Definition |29|------|------------|30| **conventional commit** | Structured commit format: `type(scope): subject` per Conventional Commits 1.0 |31| **commit type** | One of: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert |32| **breaking change** | Commit with `!` suffix or `BREAKING CHANGE:` footer requiring major version bump |33| **scope** | Optional parenthesized component name after type: `feat(auth): ...` |34| **trunk-based** | Strategy where all developers commit to main/trunk with short-lived feature branches |35| **git-flow** | Strategy with develop, feature, release, and hotfix branches |36| **github-flow** | Simplified strategy: main + feature branches with PR-based merging |37| **conflict marker** | Git-inserted `<<<<<<<`, `=======`, `>>>>>>>` delimiters in conflicted files |38| **blame** | `git blame` annotation showing last modifier per line |39| **archaeology** | Using git history commands to understand why code exists |40| **bisect** | Binary search through commits to find the one introducing a bug |41| **good/bad commit** | Bisect terminology: good = before bug, bad = after bug |4243## Mode 1: Commit4445Generate a conventional commit message from the current staged diff.4647### Commit Steps48491. Run `git diff --cached` to get staged changes502. If nothing staged, run `git diff` and report: "No staged changes. Stage files first with `git add`."513. Run `uv run python scripts/diff-summarizer.py` on the diff output524. Analyze the diff to determine:53 - **Type**: feat/fix/docs/style/refactor/perf/test/build/ci/chore/revert54 - **Scope**: affected component (from file paths, module names)55 - **Subject**: imperative, lowercase, no period, max 72 chars56 - **Body**: what changed and why (wrap at 72 chars)57 - **Breaking**: whether `BREAKING CHANGE:` footer is needed585. Reference `data/conventional-commits.json` rules for type selection596. Present the commit message. Ask: "Commit with this message? [yes / edit / cancel]"607. If approved, run `git commit -m "$(cat <<'EOF'\n<message>\nEOF\n)"`6162## Mode 2: PR6364Generate a PR description from the branch diff against the base branch.6566### PR Steps67681. Detect base branch: `git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@refs/remotes/origin/@@'` (fallback: `main`)692. Run `git log --oneline <base>..HEAD` to list commits703. Run `uv run python scripts/commit-parser.py` on git log output714. Run `git diff <base>...HEAD --stat` for change statistics725. Run `uv run python scripts/diff-summarizer.py` on the diff stat736. Generate PR description with:74 - **Title**: short summary under 70 chars75 - **Summary**: 1-3 bullet points of what changed76 - **Changes**: grouped by commit type from parsed commits77 - **Test plan**: checklist of verification steps78 - **Breaking changes**: if any commits have breaking changes797. Present the description. Ask: "Create PR with this? [yes / edit / skip]"8081## Mode 3: Strategy8283Recommend a branch strategy for the project.8485### Strategy Steps86871. Analyze the repository:88 - Team size: check `git shortlog -sn --all | wc -l`89 - Release cadence: check tags with `git tag -l --sort=-creatordate | head -20`90 - Branch count: `git branch -r | wc -l`91 - CI/CD presence: check for `.github/workflows/`, `Jenkinsfile`, `.gitlab-ci.yml`922. Reference `data/branch-strategies.json` for strategy comparison933. Score each strategy against the project profile944. Present recommendation with:95 - Recommended strategy and why96 - Comparison table showing trade-offs97 - Migration steps if switching from current approach98 - Team size and release cadence alignment99100## Mode 4: Conflict101102Guide merge conflict resolution.103104### Conflict Steps1051061. Run `git diff --name-only --diff-filter=U` to list conflicted files1072. If no conflicts: "No merge conflicts detected."1083. For each conflicted file:109 - Read the file to identify conflict markers110 - Analyze both sides (ours vs theirs)111 - Check `git log --merge -p -- <file>` for context on diverging changes112 - Determine the intent of each side1134. Present resolution guidance per file:114 - What each side changed and why115 - Recommended resolution (keep ours / keep theirs / merge both / rewrite)116 - The resolved content1175. Ask: "Apply this resolution? [yes / edit / skip per file]"1186. After resolving: remind to `git add <files>` and continue the merge/rebase119120## Mode 5: Archaeology121122Analyze git history to understand why code exists and how it evolved.123124### Archaeology Steps1251261. Parse `$ARGUMENTS[1]` as a file path or function name1272. For file paths:128 - `git log --follow --oneline -- <file>` for full history129 - `git log --follow --diff-filter=A -- <file>` for creation commit130 - `git blame <file>` for line-by-line attribution1313. For function names:132 - `git log -p --all -S '<function>' -- '*.py' '*.js' '*.ts'` (pickaxe search)133 - `git log -L :<function>:<file>` if file is known (function-level log)1344. Analyze the history to answer:135 - When was this code introduced and by whom?136 - What was the original intent? (from commit messages)137 - How has it evolved? (key modification commits)138 - Are there related changes in other files?1395. Present a narrative timeline with key commits and their context140141## Mode 6: Bisect142143Assist with git bisect to find the commit that introduced a regression.144145### Bisect Steps1461471. Ask for (if not provided):148 - **Bad commit**: where the bug exists (default: HEAD)149 - **Good commit**: where the bug did not exist150 - **Test command**: how to verify (optional, for `git bisect run`)1512. Start bisect: `git bisect start <bad> <good>`1523. If test command provided:153 - Run `git bisect run <command>`154 - Parse output for the first bad commit1554. If manual:156 - At each step, explain the current commit context157 - Ask: "Is this commit good or bad?"158 - Run `git bisect good` or `git bisect bad`1595. When bisect identifies the commit:160 - Show the full commit with `git show <hash>`161 - Explain what the commit changed162 - Suggest investigation areas1636. Clean up: `git bisect reset`164165## Reference Files166167Load ONE reference at a time. Do not preload all references into context.168169| File | Content | Load When |170|------|---------|-----------|171| `references/commit-and-pr-guide.md` | Conventional commit patterns, PR templates, diff analysis | commit or pr mode |172| `references/branch-strategies.md` | Strategy comparison, migration paths, team sizing | strategy mode |173| `references/history-and-debugging.md` | Conflict resolution, archaeology techniques, bisect patterns | conflict, archaeology, or bisect mode |174175| Data File | Content | Load When |176|-----------|---------|-----------|177| `data/conventional-commits.json` | Full spec as structured data with type definitions | commit mode (script input) |178| `data/branch-strategies.json` | Strategy comparison with pros/cons/team size | strategy mode (script input) |179180| Script | When to Run |181|--------|-------------|182| `scripts/commit-parser.py` | pr mode -- parse git log into structured JSON |183| `scripts/diff-summarizer.py` | commit or pr mode -- summarize diff statistics |184185## Critical Rules1861871. Never commit without user approval -- always present the message first1882. Never force-push, reset --hard, or run destructive git commands1893. Always use conventional commit format per the spec in data/conventional-commits.json1904. Commit subjects must be imperative, lowercase, no period, max 72 chars1915. PR descriptions must link changes to evidence from the diff1926. Never skip `git bisect reset` after a bisect session1937. Archaeology mode is read-only -- never modify code or history1948. Conflict resolution must explain both sides before recommending1959. Branch strategy must consider actual team size and release cadence, not ideals19610. Scripts output JSON to stdout -- parse programmatically, never regex19711. Stage-before-commit: if diff --cached is empty, do not fabricate a commit message19812. Do not generate changelogs or release notes -- redirect to changelog-writer