git
Git commits and branches using Epicenter conventions. Use when staging files, writing commit messages, splitting commits, checking standalone commits, creating branches, or inspecting commit history. For pull request titles and bodies, use the pull-request skill.
Works with
---
name: git
description: Git commits and branches using Epicenter conventions. Use when staging files, writing commit messages, splitting commits, checking standalone commits, creating branches, or inspecting commit history. For pull request titles and bodies, use the pull-request skill.
license: MIT
---
# Git Commit Guidelines
> **Related Skills**: See [standalone-commits](../standalone-commits/SKILL.md) for making each commit reviewable and auditable and for ordering multi-file changes into dependency-ordered waves. See [pull-request](../pull-request/SKILL.md) for PR titles, descriptions, changelog entries, issue references, and merge guidance.
## Use This For
Use this skill to inspect diffs, split commits, stage specific files, write commit messages, and manage branches.
If the task asks for a PR title, PR body, changelog entry, issue link, username verification, CODEOWNERS note, or merge strategy, use [pull-request](../pull-request/SKILL.md).
## When to Apply This Skill
Use this pattern when you need to:
- Write commit messages that follow conventional commit rules.
- Check whether a staged commit is reviewable as a standalone unit.
- Decide commit type/scope formatting and breaking-change notation.
- Create or switch branches.
- Review commit text for anti-patterns like AI/tool attribution.
## References
This skill keeps its rules inline. For PR work, use [pull-request](../pull-request/SKILL.md).
## Conventional Commits Format
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
### Commit Types
- `feat`: New features (correlates with MINOR in semantic versioning)
- `fix`: Bug fixes (correlates with PATCH in semantic versioning)
- `docs`: Documentation only changes
- `refactor`: Code changes that neither fix bugs nor add features
- `perf`: Performance improvements
- `test`: Adding or modifying tests
- `chore`: Maintenance tasks, dependency updates, etc.
- `style`: Code style changes (formatting, missing semicolons, etc.)
- `build`: Changes to build system or dependencies
- `ci`: Changes to CI configuration files and scripts
### Scope Guidelines
- **Scope is OPTIONAL**: only add when it provides clarity
- Use lowercase, placed in parentheses after type: `feat(transcription):`
- Prefer specific component/module names over generic terms
- Your current practice is good: component names (`EditRecordingDialog`), feature areas (`transcription`, `sound`)
- Avoid overly generic scopes like `ui` or `backend` unless truly appropriate
### When to Use Scope
- When the change is localized to a specific component/module
- When it helps distinguish between similar changes
- When working in a large codebase with distinct areas
### When NOT to Use Scope
- When the change affects multiple areas equally
- When the type alone is sufficiently descriptive
- For small, obvious changes
### Description Rules
- Start with lowercase immediately after the colon and space
- Use imperative mood ("add" not "added" or "adds")
- No period at the end
- Keep under 50-72 characters on first line
### Breaking Changes & Version Bumps
Our monorepo uses a unified version scheme (`8.Y.Z`) where major version 8 is permanent:
- **Patch** (default): Every merged PR increments `Z` (e.g., `8.0.1` → `8.0.2`)
- **Minor**: Add `!` after type/scope: `feat(api)!: change endpoint structure`, increments `Y`, resets `Z`
- **Major**: Manual only. Reserved for "if ever needed." Do not use `!` expecting a major bump.
Include `BREAKING CHANGE:` in the commit footer with details when using `!`.
### Examples Following Your Style:
- `feat(transcription): add model selection for OpenAI providers`
- `fix(sound): resolve audio import paths in assets module`
- `refactor(EditRecordingDialog): implement working copy pattern`
- `docs(README): clarify cost comparison section`
- `chore: update dependencies to latest versions`
- `fix!: change default transcription API endpoint`
## Commit Messages Best Practices
### The "Why" is More Important Than the "What"
The commit message subject line describes WHAT changed. The commit body explains WHY.
**Good commit** (explains motivation):
```
fix(auth): prevent session timeout during file upload
Users were getting logged out mid-upload on large files because the
session refresh only triggered on navigation, not background activity.
```
**Bad commit** (only describes what):
```
fix(auth): add keepalive call to upload handler
```
The first commit tells future developers WHY the code exists. The second makes them dig through the code to understand the purpose.
### Other Best Practices
- NEVER include Claude Code or opencode watermarks or attribution
- Each commit should represent a single, atomic change
- Write commits for future developers (including yourself)
- If you need more than one line to describe what you did, consider splitting the commit
## What NOT to Include:
- `Generated with [Claude Code](https://claude.ai/code)`
- `Co-Authored-By: Claude <noreply@anthropic.com>`
- Any references to AI assistance
- `Generated with [opencode](https://opencode.ai)`
- `Co-Authored-By: opencode <noreply@opencode.ai>`
- Tool attribution or watermarksMore Git Workflows skills
git-commit
github/awesome-copilot
Execute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
git-workflow-and-versioning
addyosmani/agent-skills
Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, or when you need to organize work across multiple parallel streams. Use when cutting a release, choosing a semantic version bump, tagging, or writing a changelog.
resolve-merge-conflicts
warpdotdev/common-skills
Resolve Git merge conflicts by extracting only unresolved paths, conflict hunks, and compact diffs instead of loading whole files into context. Use when a merge, rebase, cherry-pick, or stash pop stops on conflicts, when `git status` shows unmerged paths, or when files contain conflict markers.

