# Git

> Git workflow rules for this repository. MUST be followed for all git operations, including branching, committing and pushing.

- Skill: `conceptual-machines/git` (Agent Skill)
- Install (CLI): `npx skillmds@latest add conceptual-machines/git`
- Raw SKILL.md: https://api.skillmd.com/api/skills/conceptual-machines/git/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: Conceptual-Machines (https://skillmd.com/u/conceptual-machines)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/conceptual-machines/git

---


# Git Workflow Rules

## Creating Branches

The usual base is the current `dev/0.X.0` branch. `main` only moves at release time, so it can
trail dev by a long way. Other bases are sometimes right, so check the situation rather than
applying a fixed recipe, and ask if it is unclear.

```bash
git fetch --prune
git checkout -b <branch-name> origin/dev/0.X.0
```

**NEVER** let a feature branch track `origin/main`. This causes accidental pushes to main.

**NEVER** push directly to `origin/main`. All changes go through PRs.

If `git status` shows `third_party/faust` and `third_party/tracktion_engine` modified plus an
untracked `third_party/JUCE/`, the submodules are not actually dirty. The branch is just based
on a commit that predates JUCE becoming a first-class submodule. Rebasing onto the intended base
clears all three, so do not reset or re-sync the submodules.

## Branch Naming

Use the pattern: `feat/<short-description>` or `fix/<short-description>`

Examples:
- `feat/midi-cc-pitchbend`
- `fix/sampler-load-icon`

## Committing

- Only commit when the user explicitly asks
- Use descriptive commit messages with a short summary line
- If pre-commit hooks fail (e.g. clang-format), re-stage the formatted files and create a **new** commit. Do NOT amend
- Never use `--no-verify`

## Dangerous Commands — NEVER Run Without Explicit User Request

- `git push --force`
- `git reset --hard`
- `git checkout .` / `git restore .`
- `git clean -f`
- `git branch -D`

