commit
Create a git commit following Conventional Commits format
Works with
---
name: commit
description: Create a git commit following Conventional Commits format
license: MIT
---
# Git Commit with Conventional Commits
Create a well-structured git commit following the Conventional Commits specification.
## Conventional Commits Format
```
<type>(<scope>): <subject>
[optional body]
```
**Example**: `feat(auth): add OAuth2 login support`
## Commit Types
| Type | Description |
| ---------- | ---------------------------------------------------------------------------- |
| `feat` | A new feature |
| `fix` | A bug fix |
| `docs` | Documentation only changes |
| `style` | Changes that do not affect the meaning of the code (white-space, formatting) |
| `refactor` | A code change that neither fixes a bug nor adds a feature |
| `perf` | A code change that improves performance |
| `test` | Adding missing tests or correcting existing tests |
| `build` | Changes that affect the build system or external dependencies |
| `ci` | Changes to CI configuration files and scripts |
| `chore` | Other changes that don't modify src or test files |
| `revert` | Reverts a previous commit |
## Rules
1. **Subject line**:
- Use imperative mood ("add" not "added" or "adds")
- Do not capitalize the first letter
- No period at the end
- Keep it concise but descriptive
2. **Body** (optional):
- Separate from subject with a blank line
- Wrap at 72 characters
- Explain "what" and "why", not "how"
3. **Breaking Changes**:
- Add exclamation mark after type/scope, e.g. `feat(api)!: remove deprecated endpoints`
- Or add `BREAKING CHANGE:` in footer
## Process
1. Run `git status` to see all changes (never use `-uall` flag)
2. Run `git diff --staged` and `git diff` to understand the changes
3. Analyze the changes and determine:
- The appropriate commit type
- The scope (if applicable)
- A concise subject describing the change
4. If there are untracked files that should be committed, stage them with `git add <specific-files>`
5. Create the commit with proper formatting
6. Show the result with `git log -1`
## Examples
```bash
# Feature
git commit -m "feat(auth): add OAuth2 login support"
# Bug fix
git commit -m "fix(api): resolve null pointer in user service"
# Breaking change
git commit -m "feat(api)!: change response format for /users endpoint"
# With body
git commit -m "refactor(components): extract common button styles
Move shared button styles to a dedicated module to reduce duplication
across multiple components."
```
## Arguments
If `$ARGUMENTS` is provided:
- If it looks like a commit message, use it directly (validate format first)
- If it's a scope hint, use it to focus the analysis
## Important
- NEVER use `git add -A` or `git add .` - always add specific files
- NEVER commit sensitive files (.env, credentials, secrets)
- NEVER amend previous commits unless explicitly requested
- ALWAYS create a NEW commit, not amend existing ones
- Use HEREDOC format for multi-line commit messages:
```bash
git commit -m "$(cat <<'EOF'
type(scope): subject
body text here
EOF
)"
```More 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.

