Skip to main content
skill GitHub Copilot official · GitHub

gitmoji — GitHub Copilot skill: what it does, how to install

Turns a diff or a one-line description into a gitmoji commit message: one emoji for the intent, then a short imperative line. Useful where the repo history already runs on emoji.

Install into GitHub Copilot · Skills CLI (Vercel) All methods and platforms ↓
npx skills add github/awesome-copilot --skill gitmoji
Open on GitHub

What gitmoji does

The skill drafts commit messages in the gitmoji convention: a single emoji leads, so the purpose of a change reads at a glance. It works from a git diff, from a list of staged files, or from a sentence you type. Layout is <intention> [scope?][:?] <message>, scope optional.

A table of common intents covers :sparkles: for new features, :bug:, :recycle:, and :lock: for security fixes. A second file, references/gitmoji-reference.md, holds the full set of 75, and the skill tells the model to check it before settling: a typo or a file move has its own mark. Under GitHub Copilot the skill lives at .github/skills/gitmoji/SKILL.md. Notation follows the repo history, unicode character or a shortcode like :sparkles:.

The limit matters. It writes text only, never runs git commit, so pasting into the terminal is on you. Subject lines stay under 72 characters counting the emoji, imperative mood, no final period. A project committing with bare feat: and fix: wants a different skill.

What it helps with

  • pick one emoji when a diff mixes a feature and a refactor
  • keep the subject imperative and under 72 characters
  • tell a hotfix apart from a routine bug fix
  • switch a feat: and fix: habit over to emoji commits
  • write a body that explains why the change was needed

Example prompts for the agent

  • Write a gitmoji commit for these staged changes
  • Which gitmoji fits a typo fix in the README?
  • Gitmoji this change: extracted pagination into a shared helper

How to install gitmoji

1Skills CLI (Vercel)

npx skills add github/awesome-copilot --skill gitmoji

2GitHub CLI

gh skill install github/awesome-copilot gitmoji

3Manually: put the files in place

.github/skills/gitmoji/SKILL.md

From the same set554

The whole set →
git-commit official github This skill reviews Git changes, stages related files, and creates Conventional Commits. Use it when you want an agent to make one commit or split work into separate commits. GitHub Copilot 47,165installs excalidraw-diagram-generator official github Turn a plain-language description into an Excalidraw diagram. Useful for mapping processes, system structure, and relationships between entities. GitHub Copilot 31,639installs multi-stage-dockerfile official github This skill guides GitHub Copilot in writing multi-stage Dockerfiles for different languages and frameworks. Use it when the final runtime image should contain fewer build dependencies. GitHub Copilot 29,688installs documentation-writer official github Skill that turns the agent into a technical writer following the Diátaxis framework: tutorials, how-to guides, reference, and explanation. Proposes structure before writing. GitHub Copilot 27,757installs prd official github Turns a feature idea into a structured PRD with user stories, technical requirements, and risks. Use it when planning a software feature or an AI-powered one. GitHub Copilot 24,035installs refactor official github This skill reshapes existing code without changing its external behavior. Use it for gradual cleanup of large functions, duplication, weak types, and code smells. GitHub Copilot 22,321installs java-springboot official github Gives GitHub Copilot Spring Boot development practices, from project layout to tests and security. Use it when writing or reviewing Java application code. GitHub Copilot 21,272installs create-readme official github This skill reviews a project and creates a structured README.md. Use it when the repository needs clear documentation based on its actual files and code. GitHub Copilot 19,081installs

Similar

Questions about gitmoji

How do I install gitmoji in GitHub Copilot?

Run npx skills add github/awesome-copilot --skill gitmoji. The skill file lands at .github/skills/gitmoji/SKILL.md.

What does gitmoji do?

It picks one emoji for the intent behind a change and builds a short commit message around it. A scope in parentheses goes in only when the repo history uses scopes.

How is it different from Conventional Commits?

The intention is an emoji instead of a prefix such as feat:. On a repo that commits with bare feat: and fix:, the skill points you to conventional-commit or commit-message-storyteller.

Source text

SKILL.md · MIT
---
name: gitmoji
description: 'Generates commit messages following the gitmoji convention (https://gitmoji.dev) — picks the right emoji for the intent of the change and writes a well-formed message. Use when asked to "write a gitmoji commit", "add an emoji to my commit message", "which gitmoji should I use", "gitmoji this change", or when a project uses gitmoji-style commit messages. Works from a git diff, staged changes, or a plain description of the change. Generates the message only — does not run git commands.'
license: MIT
---

# Gitmoji

Generates commit messages that follow the [gitmoji](https://gitmoji.dev/) 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](https://www.conventionalcommits.org/) (`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:

1. **A git diff** — read it and identify what changed and why
2. **A list of staged/modified files** — infer intent from file names and paths
3. **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`](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](references/gitmoji-reference.md); if still nothing fits, fall back to the closest generic intent (✨, 🐛, or ♻️) |

## Quick Reference

```bash
# 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`](references/gitmoji-reference.md) for the complete official gitmoji list.

© github · MIT · github/awesome-copilot

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor