| name | git-workflow | ||||||
|---|---|---|---|---|---|---|---|
| description | Use when establishing branching strategies, implementing Conventional Commits, creating or reviewing PRs, resolving PR review comments, merging PRs (including CI verification, auto-merge queues, and post-merge cleanup), managing PR review threads, merging PRs with signed commits, handling merge conflicts, verifying a merge didn't silently drop changes, syncing a long-diverged branch (e.g. master into integration), rebasing a long-lived branch onto a moved base or splitting one into several PRs, integrating Git with CI/CD, setting up git hooks (lefthook, captainhook, husky, pre-commit), or debugging hook-install failures in git worktrees. Not for creating releases (use github-release) or diagnosing BLOCKED/won't-merge PRs (use github-project). | ||||||
| license | (MIT AND CC-BY-SA-4.0). See LICENSE-MIT and LICENSE-CC-BY-SA-4.0 | ||||||
| compatibility | Requires git, gh CLI; yq for .spec-cleanup.yml. | ||||||
| metadata |
|
||||||
| allowed-tools | Bash(git:*) Bash(gh:*) Read Write |
Releases: github-release. BLOCKED-PR diagnosis: github-project.
- No direct push to main — always open a PR.
- No merge before all threads resolved (
references/pull-request-workflow.md). - No squash unless asked — preserves atomic commits, signatures, bisection.
- No "tested/verified/working" without pasted command output — else say so.
- No edits to installed skill/plugin cache paths (
~/.claude/skills/,~/.claude/plugins/cache/,**/.bare/**) — always the repo worktree, verified bypwd. - Force-push only with
--force-with-lease— never plain--force. - Commit before rebase —
add → commit → fetch → rebase → push(a dirty tree aborts it). - No editorializing — state what changed, not how good it is (
references/no-editorializing.md).
| Reference | Content Triggers |
|---|---|
references/commit-conventions.md |
Conventional commits, DCO sign-off |
references/pull-request-workflow.md |
PR merge gate, signed rebase |
references/ci-cd-integration.md |
CI watching, git mirrors |
references/advanced-git.md |
Rebase, cherry-pick, bisect, stash, worktrees, reflog |
references/github-releases.md |
→ github-release skill |
references/git-hooks-setup.md |
Hook frameworks, hooks per stage |
references/claude-code-hooks.md |
settings.json merge gate, cache-path rejection, auto-lint |
references/code-quality-tools.md |
shellcheck, shfmt, git-absorb, difftastic |
references/merge-gate-watcher.md |
Merge-driver loop, check taxonomy, stale-SHA rerun |
references/spec-cleanup.md |
Planning artifacts off the base branch |
references/no-editorializing.md |
No self-praise, no narrating the expected |
<type>[scope]: <description>
feat MINOR, fix PATCH; full type list and DCO sign-off in references/commit-conventions.md.
Breaking: ! after type, or BREAKING CHANGE: in the footer.
Branches: feature/TICKET-123-description, release/1.2.0
ls lefthook.yml .lefthook.yml captainhook.json .pre-commit-config.yaml .husky/pre-commit 2>/dev/null || echo "No hooks"Install commands per framework: references/git-hooks-setup.md.
Before merging: threads resolved, CI green (incl. annotations), rebased, signed, and reviewed (human or bot, on the current head). Rebase-only + signed: git merge --ff-only.
./scripts/verify-git-workflow.sh /path/to/repository
# Gate state, next action:
./scripts/pr-status.sh [-R owner/repo] [PR] [--json] [--watch]
# Merge; refuses when the gate is shut:
./scripts/pr-merge.sh [-R owner/repo] [PR] [--dry-run|--self-reviewed]
# What a repository expects, before the first artifact:
./scripts/repo-contribution-preflight.sh [--repo <dir>] [--section docs|templates|packaging|ci|tools]
# Which copy is installed here (every script answers this):
./scripts/pr-status.sh --versionContributing: https://github.com/netresearch/git-workflow-skill