
Gitmoji
OfficialFreeGenerate expressive commit messages with emojis.
Free · Opens the source repo
What Gitmoji does
Gitmoji is a skill designed to help developers create commit messages that follow the popular gitmoji convention. By using emojis to convey the intent of changes, it enhances the readability and scannability of commit histories. This skill takes various inputs, including git diffs, staged changes, or plain descriptions, and generates a concise commit message that includes the appropriate emoji. This is particularly useful for teams and projects that have adopted the gitmoji style, allowing for a more expressive way to document changes in the codebase.
The process begins by understanding the nature of the change from the user-provided input. Whether it’s a detailed git diff or a simple description, the skill analyzes the context to determine the primary intent behind the change. After identifying the intent, it selects the most suitable gitmoji from a predefined list, ensuring that the message aligns with the established conventions of the project. The generated message is formatted correctly, adhering to best practices for commit messages, including the use of imperative mood and appropriate line lengths.
Gitmoji is particularly beneficial for developers who want to maintain a consistent and visually informative commit history. By utilizing emojis, the skill helps to quickly communicate the purpose of changes, making it easier for team members to understand the evolution of the project at a glance. This can lead to improved collaboration and clarity, especially in larger teams where tracking changes is crucial.
However, it is essential to note that Gitmoji only generates commit messages and does not execute any git commands. Users will need to manually copy the generated messages into their git workflow. This skill is ideal for projects that have already adopted the gitmoji convention but may not be suitable for those using plain Conventional Commits without emojis.
When to use it
Use this skill when you need to create a gitmoji-style commit message based on recent changes or descriptions.
When not to use it
If your project follows a different commit message convention, such as Conventional Commits, this skill may not be appropriate.
What you can build with it
Creating a New Feature Commit
When adding a new feature, simply describe the change, and Gitmoji will generate a commit message with the appropriate emoji.
Fixing a Bug
If you've fixed a bug, provide a description of the issue, and Gitmoji will produce a concise commit message that highlights the fix with the correct emoji.
Refactoring Code
For refactoring tasks, describe the changes made, and Gitmoji will help you craft a clear commit message that reflects the intent of the refactor.
How to install Gitmoji
View source1. Install with the skills CLI
npx skills add github/awesome-copilot/gitmoji --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by githubGitmoji
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 to Use This Skill
- User says "write a gitmoji commit", "gitmoji this change", or "add an emoji to my commit message"
- User asks "which gitmoji should I use for this?"
- User pastes a git diff or describes a change in a project that uses gitmoji-style commit history
- User wants an expressive, scannable commit history using emojis
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).
Message Format
The gitmoji specification:
<intention> [scope?][:?] <message>
- intention — exactly one gitmoji expressing the goal of the commit
- scope (optional) — the section of the codebase affected, in parentheses
- message — a brief imperative explanation of the change
Examples:
✨ add multi-tenant support to the billing service
🐛 (auth) prevent token refresh loop on expired sessions
♻️ (api): extract pagination logic into shared helper
Emoji Style: Unicode vs Shortcode
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.
How It Works
Step 1: Understand the Change
Work from whatever the user provides:
- A git diff — read it and identify what changed and why
- A list of staged/modified files — infer intent from file names and paths
- A plain description — use it directly
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.
Step 2: Identify the Dominant Intent
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).
Step 3: Pick Exactly One Emoji
Rules for ambiguous cases:
- Specific beats generic — a typo fix is ✏️, not 🐛; moving files is 🚚, not ♻️; a trivial non-critical fix is 🩹, not 🐛
- Tests: ✅ for adding/updating passing tests; 🧪 only for intentionally failing tests (e.g. TDD red step)
- Fix vs hotfix: 🚑️ only for urgent production fixes; everyday bug fixes are 🐛
- Security fix: 🔒️ wins over 🐛 when the bug is a security issue
- Formatting-only changes: 🎨 for code structure/formatting; 💄 only for UI/style files (CSS, themes)
- One emoji per commit — never stack emojis; if two intents feel equally dominant, see mixed changes below
Step 4: Write the Message
- Imperative mood: "add", "fix", "remove" — not "added" or "fixes"
- Keep the subject line under 72 characters including the emoji
- Lowercase start, no trailing period
- Add a scope in parentheses when the project's history uses scopes
- Add a body (separated by a blank line) only when the why is not obvious from the subject
Step 5: Output
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 🚑️.
Edge Cases
| 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 ♻️) |
Quick Reference
# 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.
Frequently asked questions about Gitmoji
Similar skills
Release Candidate Preparation
Streamline your OpenAI Agents release process.
GitHub Release
Automate your GitHub library release process effortlessly.
Commit Message Storyteller
Generate meaningful commit messages from your git diffs.
Author Contributions
Trace author contributions across branches in Git.
Implementation Kickoff
Streamline your code implementation process with ease.
Git Flow Branch Creator
Automate Git Flow branch creation based on your changes.
