Generates commit messages that follow the gitmoji convention: every commit starts with an emoji that identifies the intent of the change at a glance. Given a diff, a list of staged files, or a plain description of a change, this skill picks the single most appropriate gitmoji and writes a concise, well-formed commit message around it.
This skill only generates the message — it never runs git commit or any other git command. The output is a copyable message for the user to use.
When not to use: if the project follows plain Conventional Commits (feat:, fix:, ...) without emojis, use the conventional-commit or commit-message-storyteller skill instead. If unsure which convention the project uses, ask the user to provide recent commit history (for example, the output of git log --oneline -10).
The gitmoji specification:
<intention> [scope?][:?] <message>
Examples:
✨ add multi-tenant support to the billing service
🐛 (auth) prevent token refresh loop on expired sessions
♻️ (api): extract pagination logic into shared helper
Gitmoji supports two equivalent notations:
| Style | Example | When to prefer |
|---|---|---|
| Unicode | ✨ add dark mode |
Default — renders everywhere, shorter subject line |
| Shortcode | :sparkles: add dark mode |
Platforms that render shortcodes (GitHub, GitLab) or teams that grep commit logs by code |
Match the repository's existing history. If recent commits use :sparkles:-style shortcodes, generate shortcodes; otherwise default to unicode emojis.
Work from whatever the user provides:
If the intent is genuinely ambiguous (e.g. "updated auth.js" could be a fix, a feature, or a refactor), ask one short clarifying question rather than guessing.
Determine the primary purpose of the change. Common intents and their gitmojis:
| Emoji | Shortcode | Intent |
|---|---|---|
| ✨ | :sparkles: |
Introduce new features |
| 🐛 | :bug: |
Fix a bug |
| 🚑️ | :ambulance: |
Critical hotfix |
| 📝 | :memo: |
Add or update documentation |
| ♻️ | :recycle: |
Refactor code (no behavior change) |
| ✅ | :white_check_mark: |
Add, update, or pass tests |
| ⚡️ | :zap: |
Improve performance |
| 🎨 | :art: |
Improve structure / format of the code |
| 🔥 | :fire: |
Remove code or files |
| 🔒️ | :lock: |
Fix security or privacy issues |
| ⬆️ | :arrow_up: |
Upgrade dependencies |
| 🔧 | :wrench: |
Add or update configuration files |
| 💄 | :lipstick: |
Add or update the UI and style files |
| 💥 | :boom: |
Introduce breaking changes |
| 🚨 | :rotating_light: |
Fix compiler / linter warnings |
| 🌐 | :globe_with_meridians: |
Internationalization and localization |
This is only the most common subset — always consult references/gitmoji-reference.md for the full official list of 75 gitmojis before settling on one; a more specific emoji often exists (e.g. 🩹 for a trivial fix, ✏️ for a typo, 🚚 for a file move).
Rules for ambiguous cases:
Produce the commit message in a copyable code block, followed by one line explaining why that gitmoji was chosen. Do not execute git commit.
Example output:
🐛 (auth) prevent token refresh loop on expired sessions
Expired sessions triggered a refresh that failed validation and
re-triggered itself, crashing the app. A recursion guard now aborts
the cycle and returns a clean 401.
Why 🐛: the change corrects incorrect runtime behavior — a bug fix, not urgent enough for 🚑️.
| Situation | How to Handle |
|---|---|
| Mixed changes (e.g. feature + refactor in one diff) | Pick the emoji for the dominant intent, and suggest splitting into separate commits if the concerns are unrelated |
| Breaking change | Use 💥 as the intention and describe the break in the body |
| Revert | ⏪️ with a subject referencing the reverted commit |
| Merge commit | 🔀 merge branch '<name>' into <target> |
| Initial commit | 🎉 begin project |
| Work in progress | 🚧 with a clear note of what remains |
| No matching emoji feels right | Re-scan the full reference; if still nothing fits, fall back to the closest generic intent (✨, 🐛, or ♻️) |
# Get your staged diff to paste into Copilot
git diff --staged
# Check which emoji style the repo already uses
git log --oneline -10
See references/gitmoji-reference.md for the complete official gitmoji list.