MCPInstall

git-best-practices

Use when creating commits, managing branches, opening PRs, or rewriting history. Not for non-git implementation tasks or repo-specific release policy decisions.

Installs
261
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/alleneubank/claude-code --skill git-best-practices
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads git-best-practices automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Git Best Practices

Always Active Principles

When this skill is loaded, follow these directives for all git operations:

  1. Discover before acting — run branch discovery to determine the repo's default and production branches before branching, merging, or opening PRs
  2. Conventional commits — every commit uses type(scope): description format
  3. Stage explicitly — add files by name so only intended changes are committed
  4. Protect shared history — use --force-with-lease for force pushes; confirm with the user before any force push

Agent Git Workflow

  1. Check state — run git status and git diff HEAD
  2. Discover branches — identify default/current/(optional) production branch names (see Branch Discovery)
  3. Stage by name — git add path/to/file for each file; verify with git status
  4. Write a conventional commit — type(scope): description with optional body
  5. Push safely — regular push by default; git push --force-with-lease origin {branch} only for rewritten history after user confirmation

Checkpoint Commits

Agents may create WIP checkpoint commits during long-running tasks, cleaned up before PR.

  • Prefix with wip: or use standard conventional commit format
  • Keep changes logically grouped even in WIP state
  • Run /rewrite-history before opening a PR to craft a clean narrative

Commit Discipline

  • Stage files explicitly by name: git add src/auth.ts src/auth.test.ts
  • Verify staged content with git status before committing
  • Keep secrets, .env files, credentials, and large binaries out of commits — warn the user if staged files look sensitive
  • Target one logical change per commit in final PR-ready state

Force Push

Use --force-with-lease exclusively to protect against overwriting upstream changes:

git push --force-with-lease origin feat/my-branch

Always confirm with the user before any force push, regardless of branch.

Rebasing a Stack

When rebasing a branch that other branches are stacked on (e.g. phased NN-description chains), use git rebase --update-refs so the stacked branches follow the rewrite instead of being orphaned on the old commits. --update-refs moves local refs only — each moved branch that also exists on the remote still needs its own --force-with-lease push (after confirmation), and any branch checked out in another worktree is skipped. For the full conflict-resolution and safety workflow, use the git-rebase-sync skill.

Conventional Commits

Format: type(scope): description

Subject line rules:

  • Lowercase, imperative mood, no trailing period
  • Under 72 characters
  • Scope is optional but preferred when a clear subsystem exists

Common types:

TypeUse for
featNew functionality
fixBug fix
docsDocumentation only
refactorRestructuring without behavior change
perfPerformance improvement
choreMaintenance, dependencies, tooling
testAdding or updating tests
ciCI/CD pipeline changes
buildBuild system changes
styleFormatting, whitespace (no logic change)

Commit Bodies

Body is optional — only add one when the change is genuinely non-obvious. The subject line carries the "what"; the body explains "why."

Add a body when:

  • The motivation or tradeoff is non-obvious
  • Multi-part changes benefit from a bullet list
  • External context is needed (links, issue references, root cause)

See git-examples.md for commit message examples.

Branch Discovery

Before branching or opening a PR, discover the repo's branch topology. Run these commands and store the results:

# Default branch (PR target for most repos)
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'

# Current branch
git branch --show-current

# Production branch (if different from default)
git branch -r --list 'origin/main' 'origin/master' 'origin/production'

If gh is unavailable or the repo has no remote, see the fallback commands in git-examples.md.

Store the discovered branch name and reference it throughout. Use the actual branch name in all subsequent commands.

Branch Naming

Use repository branch naming conventions first. If no convention is documented, use:

Format: type/description-TICKET-ID

Examples:

  • feat/add-login-SEND-77
  • fix/pool-party-stall-SEN-68
  • chore/update-deps
  • hotfix/auth-bypass

Include the ticket ID when an issue exists. Omit when there is no ticket.

Branch Flow

Use repository branch flow policy first. If policy is undocumented, a common baseline is:

{production-branch} (production deploys)
 └── {default-branch} (staging/testnet deploys, PR target)
      ├── feat/add-feature-TICKET
      ├── fix/bug-description-TICKET
      └── hotfix/* (branches off production branch for hotfixes)
  • Feature and fix branches start from the default branch
  • Hotfix branches start from the production branch
  • PRs target the default branch unless the repo uses a single-branch flow
  • When default branch and production branch are the same, all PRs target that branch directly

Merge Strategy

Use repository merge policy first (required in many organizations).

If no policy exists, these defaults are reasonable:

PR targetStrategyRationale
Feature → default branchSquash mergeClean history, one commit per feature
Default → productionMerge commitPreserves the release boundary; visible deploy points
Hotfix → productionSquash mergeSingle atomic fix on production

PR Workflow

Sizing

Pragmatic sizing over arbitrary limits. Each commit tells a clear story regardless of PR size. A PR should be reviewable as a coherent unit — if a reviewer cannot hold the full change in their head, consider splitting.

PR Creation

Use repo-native PR tooling (gh pr create, GitLab CLI, or web UI) with:

  • Short title under 70 characters
  • Summary section with 1-3 bullet points
  • Test plan as a bulleted checklist

History Rewriting Before PR

For branches with messy WIP history, use /rewrite-history to:

  1. Backup the branch
  2. Reset to the base branch tip
  3. Recommit changes as a clean narrative sequence
  4. Verify byte-for-byte match with backup
  5. Confirm with the user before force-pushing rewritten history
  6. Open PR with link to backup branch

Each rewritten commit introduces one coherent idea, building on the previous — like a tutorial teaching the reader how the feature was built.

FAQ

What does the git-best-practices skill do?

Use when creating commits, managing branches, opening PRs, or rewriting history. Not for non-git implementation tasks or repo-specific release policy decisions.

How do I install git-best-practices?

Run npx skills add https://github.com/alleneubank/claude-code --skill git-best-practices in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/git-best-practices/ (personal) or .claude/skills/git-best-practices/ (project).

Which AI agents can use git-best-practices?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is git-best-practices safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains git-best-practices?

It is published by alleneubank in alleneubank/claude-code. It has 261 recorded installs.

More from alleneubank/claude-code

View all →

typescript-best-practices

alleneubank/claude-code

Use when reading or writing TypeScript or JavaScript files (.ts, .tsx, .js, tsconfig.json).

react-best-practices

alleneubank/claude-code

Use when reading or writing React components (.tsx, .jsx files with React imports).

Frontend & Design3.2K installs

python-best-practices

alleneubank/claude-code

Use when reading or writing Python files (.py, pyproject.toml, requirements.txt).

web-fetch

alleneubank/claude-code

Fetches web content as clean markdown by preferring markdown-native responses and falling back to selector-based HTML extraction. Use for documentation, articles, and reference pages at http/https URLs.

Docs & Writing978 installs

nix-best-practices

alleneubank/claude-code

Use when working with Nix flakes, overlays, shell.nix, or flake.nix files.

zig-best-practices

alleneubank/claude-code

Use when reading or writing Zig files (.zig, build.zig, build.zig.zon).

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.