DEV Community

Babak K. Shandiz
Babak K. Shandiz

Posted on • Edited on • Originally published at babakks.github.io

Emojis for Better Git Commit Messages

🎉 UPDATE 1: You can now access the underlying dataset of this post via git-emoji/dataset-js repository on GitHub. It's also available as a NPM package; @git-emoji/dataset-js.

🎉 UPDATE 2: This is now available as a VS Code extension, named Git-Emoji. You can install it from within VS Code or via extensions marketplace. You can also see this short blog post on this new extension.

I have to confess that I'm madly in love with emojis. They're cute, little digital beings that convey your emotions or meaning far better/deeper/shorter than words. Using them in git commit messages was a truly brilliant idea from whom we'd never know. Speaking of commit messages, it's obvious we're not going to leverage the emotional charge of the emojis --at least for now-- but their terseness and excellent readability is their best merit we could use. Let alone their diversity, wide availability, and text nature.

The problem with emojis

As a big fan, I use them almost everywhere I can replace them for words, though sometimes it's a little difficult to find the right emoji. When it comes to writing git commit messages, people won't feel good for wasting 15 minutes looking for the best emoji on the context. That's one reason, I guess, that emojis are yet to grow popular. There are few cases that our exact intention easily matches with an emoji. In most cases you have to rephrase, rethink or reshape your words to find that hidden one. I get it. That's why I started to write an article on the subject to list some of my favorite emojis that you'll find extremely useful in your day-to-day experience.

Emoji rock stars

I myself first saw this neat GitHub Gist on the emoji recommendations. The author, François, did cover a wide range of situations. In the beginning, I've been trying to stick with them but sometimes it was hard to find my intent within the list. So, I began to deliberately collect my own emoji rock stars.

This is my list:

Emojis Example commit message(s)
🎉 :tada: First commit
🔨 :hammer: Update code
Improve code
📜 :scroll:
✏️ :pencil:
📚 :books:
📝 :memo:
📖 :book:
Update README.md
Add docs
👕 :tshirt:
👔 :necktie:
Apply linter
Format code
⚗️ :alembic:
🧪 :test_tube:
Add tests
Update unit tests
👶 :baby: Add basic implementation
Add partial impl.
🏅 :medal_sports: Finish implementation
⤴️ :arrow_heading_up: Upgrade dependency
Upgrade version
⤵️ :arrow_heading_down: Downgrade dependency
Downgrade version
🎨 :art:
💅 :nail_care:
💄 :lipstick:
Improve visuals
Enhance UI/UX
♿️ :wheelchair: Improve accessibility features
:sparkles:
🚿 :shower:
Clean code
🔥 :fire:
🔫 :gun:
✂️ :scissors:
Delete directory
Remove unnecessary files
💩 :poop:
🍝 :spaghetti:
Mess up legacy code
Apply dirty patch
⚡️ :zap: Introduce breaking changes
🐛 :bug: Fix bug
🚧 :construction: Apply temporary patch
Improve work in progress
🚑 :ambulance: Apply urgent fix
Fix critical bug
🌙 :crescent_moon: Update nightly builds config
Create background jobs
🐰 :rabbit: Add RabbitMQ requirements
🐋 :whale: Add Dockerfile
Update docker-compose
:octocat: Add .github dir (only on github.com)
🦊 :fox_face: Add .gitlab dir
Update .gitlab-ci.yml
🎁 :gift:
📦 :package:
Add new dependencies
Add new feature
🔔 :bell: Add alarm/warning
🔕 :no_bell:
🔇 :mute:
Silence alarms/warnings
🔐 :closed_lock_with_key:
🔒 :lock:
🛡 :shield:
Improve security
Set more permissions
🔓 :unlock:
🔑 :key:
Lift permissions
Remove restrictions
📁 :file_folder: Change dir structure
⌚️ :watch:
:stopwatch:
Add profiler
Add performance measurements
📊 :bar_chart: Improve performance
🔖 :bookmark: Update version
🎒 :school_satchel:
🚀 :rocket:
Build and pack
Make ready for deployment/launch
📈 :chart_with_upwards_trend: Improve performance
📉 :chart_with_downwards_trend: Minimize resource usage
📎 :paperclip: Attach doc/file
✈️ :airplane: Migrate to new interface
Create data migration
🏁 :checkered_flag: Finish impl
Meet roadmap checkpoint
🎭 :performing_arts: Merge branches
Merge two modules
⚓️ :anchor: Put TODO anchors
🚩 :triangular_flag_on_post: Meet roadmap checkpoint
©️ :copyright:
®️ :registered:
Add LICENSE file
Update LICENSE

Emojis by context

Of course knowing various emojis like the list above helps a lot, but more often that not I find myself trying to recall an emoji that fits best with my already written (or thought of) commit message. Not always would you find the closest emoji within a list like the one you've seen. That's when you'd rather have a subject-/context-oriented table in which you could easily find the best candidates for your intent. I'm talking about such a table:

Emojis Context (verb/noun/adjective)
🐛:bug:
🔨:hammer:
🔧:wrench:
🗜:clamp:
correct
fix
bugfix
🐚:shell:
👐:open_hands:
📦:package:
🎁:gift:
🗳:ballot_box:
🗃:card_file_box:
📥:inbox_tray:
📤:outbox_tray:
wrap
hold
cover
shell
safe
box
contain
🎭:performing_arts:
🤝:handshake:
🗜:clamp:
📎:paperclip:
🖇:paperclips:
🔗:link:
🔀:twisted_rightwards_arrows:
🔃:arrows_clockwise:
🔄:arrows_counterclockwise:
👥:busts_in_silhouette:
merge
mix
attach
convolve
append
prepend
unify
combine
distill
handshake
🔥:fire:
🔫:gun:
💣:bomb:
🗑:wastebasket:
🚮:put_litter_in_its_place:
⚰️:coffin:
☠️:skull_and_crossbones:
💀:skull:
✝️:latin_cross:
:x:
:negative_squared_cross_mark:
✖️:heavy_multiplication_x:
📤:outbox_tray:
✂️:scissors:
🔪:knife:
⚔️:crossed_swords:
🗃:card_file_box:
🗄:file_cabinet:
remove
delete
drop
cancel
exclude
archive
📶:signal_strength:
📈:chart_with_upwards_trend:
📉:chart_with_downwards_trend:
↕️:arrow_up_down:
⬆️:arrow_up:
⬇️:arrow_down:
🍽:plate_with_cutlery:
🔢:1234:
order
sort
arrange
reorder
🔨:hammer:
🔧:wrench:
🎖:medal_military:
:sparkles:
🥇:1st_place_medal:
🎨:art:
🖌:paintbrush:
💄:lipstick:
💅:nail_care:
👠:high_heel:
🌈:rainbow:
🐦:bird:
improve
enhance
upgrade
refresh
beauty
embellish
cosmetics
💉:syringe:
🔨:hammer:
🔧:wrench:
✔️:heavy_check_mark:
:white_check_mark:
☑️:ballot_box_with_check:
🖊:pen:
apply
set
put
commit
register
confirm
:heavy_plus_sign:
📎:paperclip:
🖇:paperclips:
📦:package:
🎁:gift:
🏁:checkered_flag:
⬆️:arrow_up:
🌱:seedling:
:arrow_double_up:
📥:inbox_tray:
👶:baby:
🐤:baby_chick:
🚼:baby_symbol:
🆕:new:
🌼:blossom:
:sparkles:
❇️:sparkle:
🔌:electric_plug:
add
insert
update
upgrade
increase
register
append
prepend
feature
👕:shirt:
/:tshirt:
🎖:medal_military:
📏:straight_ruler:
📐:triangular_ruler:
🚿:shower:
💊:pill:
🎨:art:
🖌:paintbrush:
💄:lipstick:
💅:nail_care:
👠:high_heel:
🌈:rainbow:
lint
clean
format
style
refactor
🏗:building_construction:
🔨:hammer:
🔧:wrench:
🛠:hammer_and_wrench:
♻️:recycle:
refactor
rewrite
reestablish
reimplement
rethink
recycle
⚗️:alembic:
:stopwatch:
🔍:mag:
🔎:mag_right:
🕵:detective:
🔭:telescope:
🔬:microscope:
🗜:clamp:
test
assess
exam
check
review
rethink
supervise
fixture
✉️:envelope:
📤:outbox_tray:
📡:satellite:
🚀:rocket:
✈️:airplane:
🛩:small_airplane:
🚁:helicopter:
🏹:bow_and_arrow:
📰:newspaper:
🗞:newspaper_roll:
📺:tv:
📻:radio:
🎤:microphone:
📢:loudspeaker:
🔈:speaker:
send
move
out
publish
transform
give
produce
:question:
:grey_question:
🍴:fork_and_knife:
📥:inbox_tray:
ask
request
inquiry
query
fetch
receive
take
👂:ear:
🎧:headphone:
:hourglass_flowing_sand:
:pause_button:
📨:incoming_envelope:
✉️:envelope:
☎️:phone:
📲:calling:
consume
listen
subscribe
register
await
callback
standby
:stopwatch:
:timer:
:alarm_clock:
📆:calendar:
🗓:spiral_calendar:
🏃:runner:
job
cron
schedule
time
period
repeat
repetitive
🔍:mag:
🔎:mag_right:
🔦:flashlight:
🕵:detective:
🔭:telescope:
🔬:microscope:
🐶:dog:
🐕:dog2:
👃:nose:
search
find
lookup
browse
query
select
⬇️:arrow_down:
:arrow_double_down:
⤵️:arrow_heading_down:
👎:thumbsdown:
rollback
downgrade
reset
repopulate
revert
undo
📜:scroll:
📝:pencil:
✍️:writing_hand:
📰:newspaper:
🗞:newspaper_roll:
📋:clipboard:
📖:book:
📑:bookmark_tabs:
📚:books:
📘:blue_book:
📙:orange_book:
📓:notebook:
🖊:pen:
✏️:pencil2:
🖨:printer:
📠:fax:
💬:speech_balloon:
log
record
store
draft
note
text
README
guide
manual
comment
⚠️:warning:
:hand:
❗️:heavy_exclamation_mark:
❗️:exclamation:
:grey_exclamation:
avoid
prevent
caution
safe
look out
beware
notice
warning
🛑:stop_sign:
☣️:biohazard:
💀:skull:
☠️:skull_and_crossbones:
🔥:fire:
:stop_button:
⚰️:coffin:
✝️:latin_cross:
✖️:heavy_multiplication_x:
error
exception
hazard
danger
stop
crash
abort
deadlock
👨:man:
👩:woman:
user
human
operator
📺 :tv:
📱:iphone:
🖼:framed_picture:
🖌:paintbrush:
✒️:black_nib:
🎨:art:
🌈:rainbow:
UI
UX
HTML
CSS
front-end
view
face
canvas
image
picture
☸️:wheel_of_dharma:
⚙️:gear:
🎛:control_knobs:
🛠:hammer_and_wrench:
:hammer_and_pick:
🔨:hammer:
🔧:wrench:
🗜:clamp:
🔢:1234:
🔡:abcd:
🔠:capital_abcd:
config
setup
parameter
argument
reference
fixture
🤡:clown:
👒:womans_hat:
🎭:performing_arts:
🎬:clapper:
🌚:new_moon_with_face:
🕶:dark_sunglasses:
🎠:carousel_horse:
🍼:baby_bottle:
👶:baby:
🐤:baby_chick:
🚼:baby_symbol:
mock
fake
stub
test
assess
impersonate
improvise
simulate
emulate
behave
🔑:key:
🗝:old_key:
🏷:label:
🔗:link:
👶:baby:
🐤:baby_chick:
💼:briefcase:
📁:file_folder:
📂:open_file_folder:
variable
field
property
key
item
element
🏃:runner:
🚴:bicyclist:
🚵:mountain_bicyclist:
🤸‍♂:man_cartwheeling:
🤸‍♀:woman_cartwheeling:
🎬:clapper:
📢:loudspeaker:
🔈:speaker:
🚗:car:
🚀:rocket:
✈️:airplane:
🛩:small_airplane:
👨‍🏭:man_factory_worker:
👩‍🏭:woman_factory_worker:
method
function
behavior
action
paly
execute
run
🛑:stop_sign:
⛔️:no_entry:
🚫:no_entry_sign:
🚷:no_pedestrians:
🚳:no_bicycles:
🚱:non-potable_water:
🛡:shield:
⚠️:warning:
✖️:heavy_multiplication_x:
:hand:
:stop_button:
🏰:european_castle:
🚨:rotating_light:
🚓:police_car:
👮:policeman:
👮‍♀:policewoman:
🚔:oncoming_police_car:
❗️:heavy_exclamation_mark:
👨‍⚖:man_judge:
👩‍⚖:woman_judge:
👽:alien:
limit
bound
line
threshold
ceiling
floor
restrict
constrain
restrain
🗒:spiral_notepad:
📓:notebook:
📏:ruler:
📐:triangular_ruler:
📤:outbox_tray:
📦:package:
🔍:mag:
🔎:mag_right:
🕵:detective:
🔢:1234:
🔡:abcd:
🔠:capital_abcd:
📂:open_file_folder:
🐚:shell:
🚰:potable_water:
🖥:desktop_computer:
👨‍🏫:man_teacher:
👩‍🏫:woman_teacher:
detail
info
data
body
content
📦:package:
📥:inbox_tray:
💉:syringe:
💾:floppy_disk:
💿:cd:
⌨️:keyboard:
🔑:key:
🗝:old_key:
🔐:closed_lock_with_key:
🔏:lock_with_ink_pen:
🔒:lock:
🏦:bank:
✍️:writing_hand:
📋:clipboard:
📓:notebook:
🗒:spiral_notepad:
📝:pencil:
🖊:pen:
✏️:pencil2:
🖨:printer:
📠:fax:
🎞:film_strip:
store
persist
save
keep
serialize
write
buffer
memory
📤:outbox_tray:
👓:eyeglasses:
👂:ear:
🔑:key:
🗝:old_key:
load
fetch
read
deserialize
query
🔒:lock:
🔐:closed_lock_with_key:
🔏:lock_with_ink_pen:
🛡:shield:
💂:guardsman:
💂‍♀:guardswoman:
security
ACL
shield
protect
antivirus
guard
encrypt
scramble
hash
sign
clutter
secure
code
hide
conceal
secret
lock
restrict
cover
🔑:key:
📂:open_file_folder:
📖:open_book:
🔦:flashlight:
📺:tv:
📰:newspaper:
🔈:speaker:
📢:loudspeaker:
🆓:free:
decrypt
unscramble
decode
show
open
reveal
unveil
unleash
uncover
release
free
authentication
authorization
🌐:globe_with_meridians:
🗺:world_map:
🌍:earth_africa:
🌎:earth_americas:
🌏:earth_asia:
🕸:spider_web:
🏙:cityscape:
🏣:post_office:
📮:postbox:
URL
URI
path
address
location
access
route
identifier
🖼:framed_picture:
📺:tv:
🖥:desktop_computer:
📽:film_projector:
🎦:cinema:
🖨:printer:
📏:ruler:
📐:triangular_ruler:
🖊:pen:
✏️:pencil2:
🎨:art:
🖌:paintbrush:
show
display
visible
illustrate
demonstrate
paint
draw
print
✂️:scissors:
🏇:horse_racing:
🐎:racehorse:
🐒:monkey:
🏎:racing_car:
skip
ignore
neglect
jump
overlook
unfollow
forget
⤴️:arrow_heading_up:
♻️:recycle:
🔃:arrows_clockwise:
🔄:arrows_counterclockwise:
🔁:repeat:
🔂:repeat_one:
:previous_track_button:
🏗:building_construction:
🎡:ferris_wheel:
retry
restart
reboot
rerun
restablish
reattempt
reconstruct
reimplement
refactor
🏃:runner:
🚗:car:
🏎:racing_car:
🚅:bullettrain_front:
🚈:light_rail:
✈️:airplane:
🚀:rocket:
🛫:flight_departure:
🌩:cloud_with_lightning:
☂️:open_umbrella:
☔️:umbrella:
🐎:racehorse:
🏇:horse_racing:
💥:boom:
🌋:volcano:
🌅:sunrise:
:play_or_pause_button:
🏗:building_construction:
run
execute
boot
establish
try
attempt
apply
drive
move
start
begin
ON
launch
construct
implement
init
initialize
:stop_button:
:pause_button:
🛑:stop_sign:
:hand:
❗️:heavy_exclamation_mark:
💀:skull:
☠️:skull_and_crossbones:
🛬:flight_arrival:
🏁:checkered_flag:
✖️:heavy_multiplication_x:
:negative_squared_cross_mark:
📴:mobile_phone_off:
🔫:gun:
⚰️:coffin:
✝️:latin_cross:
💣:bomb:
stop
end
pause
abort
OFF
out
wait
hold
holdup
suspend
suppress
silence
silent
kill
interrupt
destruct
dispose
🎒:school_satchel:
🚀:rocket:
✈️:airplane:
⬆️:arrow_up:
:arrow_double_up:
🔼:arrow_up_small:
🆙:up:
📢:loudspeaker:
🔈:speaker:
📯:postal_horn:
🎈:balloon:
🎊:confetti_ball:
🎉:tada:
📰:newspaper:
🗞:newspaper_roll:
📡:satellite:
🛰:artificial_satellite:
deploy
install
setup
launch
👈:point_left:
👉:point_right:
☝️:point_up:
👇:point_down:
👣:footprints:
🐾:paw_prints:
⤵️:arrow_heading_down:
⤴️:arrow_heading_up:
↪️:arrow_right_hook:
↩️:leftwards_arrow_with_hook:
🔀:twisted_rightwards_arrows:
⛲️:fountain:
♻️:recycle:
🔁:repeat:
🔂:repeat_one:
💱:currency_exchange:
redirect
transform
change
direct
guide
align
0️⃣:zero:
❤️:heart:
💟:heart_decoration:
🌄:sunrise_over_mountains:
☀️:sunny:
🌱:seedling:
🌾:ear_of_rice:
💻:computer:
🏠:house:
🏡:house_with_garden:
🦋:butterfly:
⚙️:gear:
🕯:candle:
🌼:blossom:
🐟:fish:
🛐:place_of_worship:
⛪️:church:
🕌:mosque:
base
ground
floor
core
center
middle
heart
root
home
origin
💀:skull:
☠️:skull_and_crossbones:
☣️:hazard:
☣️:biohazard:
🕳:hole:
🔫:gun:
🌋:volcano:
💥:boom:
🐍:snake:
💸:money_with_wings:
🤜:fight:
🤼‍♂:men_wrestling:
🤼‍♀:women_wrestling:
🥊:boxing_glove:
🏥:hospital:
🚑:ambulance:
trespass
breach
vulnerability
access
hole
penetrate
spy
listen
hack
compromise
reveal
📦:package:
🗃:card_file_box:
🗄:file_cabinet:
🔌:electric_plug:
🔲:black_square_button:
🔳:white_square_button:
⬜️:white_large_square:
⬛️:black_large_square:
🍯:honey_pot:
🔨:hammer:
🛠:hammer_and_wrench:
🔧:wrench:
💻:computer:
💽:minidisc:
📎:paperclip:
🖇:paperclips:
package
dependency
module
library
component
plugin
add-in
plug
object
container
image
🌈rainbow: 🥞:pancakes:
🍔:burger:
🌭:hotdog:
📌:pushpin:
📍:round_pushpin:
🤹‍♂:man_juggling:
🤹‍♀:woman_juggling:
middleware
intermediate
middleman
dealer
layer
🕸:spider_web:
📶:signal_strength:
📊:bar_chart:
📁:file_folder:
📂:open_file_folder:
🌳:tree:
🍃:leaf:
structure
organize
format
tree
leaf
edge
graph
net
network
☂️:open_umbrella:
☔️:umbrella:
🏕:camping:
⚔️:crossed_swords:
🗺:world_map:
🌐:globe_with_meridians:
cover
range
shadow
area
support
resolve
♻️:recycle:
🔁:repeat:
🔂:repeat_one:
🔃:arrows_clockwise:
🔄:arrows_counterclockwise:
🔢:1234:
🔡:abcd:
🔠:capital_abcd:
loop
while
for
do
loopback
repeat
repetition
iterate
enumerate
🚧:construction:
🚨:rotating_light:
⚠️:warning:
⌛️:hourglass:
:hourglass_flowing_sand:
:timer_clock:
:stopwatch:
🚦:vertical_traffic_light:
🚥:traffic_light:
temporary
work in progress
WIP
pend
wait
suspend
block
hinder

Look further

See emoji cheat sheet for a complete list of emojis that you can use on GitHub or other platforms.

Top comments (22)

Collapse
 
gv_rene profile image
René González

I like using emojis on my commit names, but sadly our CI tool use the commit hash + commit name as identifier and it has some issues using commit names that contain emojis :(.
Well at least I can still put emojis on commit comments.

Collapse
 
klyse profile image
klyse

have a look at this website: gitmoji.carloscuesta.me/

Collapse
 
babakks profile image
Babak K. Shandiz • Edited

I've come across gitmoji a few times now and then. Recently, I've also suggested a feature for some kind of contextual emoji search (like the second table in the article,) in the gitmoji-cli repo:
github.com/carloscuesta/gitmoji-cl...

Feel free to endorse the issue, if you think that'll help users, or comment your ideas below that thread. 😊

Collapse
 
serkzex profile image
Mujtaba Aldebes

That's a cool post! But since there are no general standardization for the usage of these emojis each team/project will determine their own definition/meaning. That will eventuate in one emoji having different meaning cross projects.

Collapse
 
babakks profile image
Babak K. Shandiz

That is true. Although, in widespread use, especially on open source projects, community-based standards could emerge.

Collapse
 
sirawit profile image
Dragodzs
Collapse
 
babakks profile image
Babak K. Shandiz

I've come across gitmoji a few times now and then. Recently, I've also suggested a feature for some kind of contextual emoji search (like the second table in the article,) in the gitmoji-cli repo:
github.com/carloscuesta/gitmoji-cl...

Feel free to endorse the issue, if you think that'll help users, or comment your ideas below that thread. 😊

Collapse
 
goodevilgenius profile image
Dan Jones

I can't endorse gitmoji-cli enough. I think it's super convenient. I just do git commit, and gitmoji-cli automatically (using a git hook) gives me an interactive prompt to choose the best emoji.

It's quick and easy and I don't have to think much about which emoji to use.

Collapse
 
sirawit profile image
Dragodzs

It's a good article I wait for use with gitmoji-cli. I love emoji 😄

Collapse
 
riidom profile image
riidom

That's a great list to narrow down the choices, thanks for that. I think, emojis can be well used as a graphical way of tagging or categorizing. Not as replacement for github labels, but rather start the commit message with a single emoji to give an idea what it is about.

This way you could sort raw release logs which consist only of commit messages by text and have everything grouped that belongs together.

But I have to see this done in wild to know if it actually works :) I just had some ideas about it while reading your post.

Collapse
 
babakks profile image
Babak K. Shandiz

Thank you. I'm totally agree with prefixing emojis in commit messages. I, myself, use emojis and the beginning of issue/pull requests, too.

Collapse
 
limusina10 profile image
limusina10

Nice post!

Collapse
 
babakks profile image
Babak K. Shandiz

Thanks. 😊

Collapse
 
mxldevs profile image
MxL Devs

Too bad there's no upside-down smiley. I would put that in every message 🙃

Collapse
 
babakks profile image
Babak K. Shandiz • Edited

For me, 4 out of every 5 commit messages begin with the hammer emoji, i.e., 🔨. So, you can use your own fav. 😉

Collapse
 
cybermischa profile image
Mischa Spiegelmock

The plural of emoji is 'emoji'

Collapse
 
babakks profile image
Babak K. Shandiz

No. I now checked with Google.
Google

Collapse
 
cybermischa profile image
Mischa Spiegelmock

I guess it's complicated theatlantic.com/technology/archive...

Collapse
 
patarapolw profile image
Pacharapol Withayasakpunt

I use commitizen to help insert emoji in every commit. (cz-emoji, actually)

Otherwise, I think it is better to use a good emoji IME, and insert the actual emoji, instead of the text.

Collapse
 
babakks profile image
Babak K. Shandiz

I agree. The :emoji: notation gets in the way when you want to, for example, see the git logs in a terminal.

Collapse
 
spiritupbro profile image
spiritupbro

this is cool usually i use gitmoji i dont know someone really put an effort to create a gitmoji like this good work pal

Collapse
 
babakks profile image
Babak K. Shandiz

You're welcome.