Semantic Commit Messages
"Commit to meaning" in Github

Software Engineering জীবনে আমরা সবাই-ই কোনো না কোনো সময় কমিট করি। প্রোগ্রামার হিসেবে যখন world কে hello বলতে শিখেছি, তখন হয়তো প্রথম কমিটটা গিটহাব নিজেই সাজেস্ট করেছিলো “first commit” নামে । তারপর কলেজ প্রজেক্টের জন্য হয়তো কমিট মেসেজে লিখতে শুরু করি শুধু ডট, xyz, update বা fix — এই টাইপের ছোট্ট, অর্থহীন কমিট মেসেজ। হয়ত ভাবতাম, “আরে commit তো হয়ে যাচ্ছে, কাজ চললেই হলো!”
কিন্তু একটু থামুন । আপনি যখন বড় কোনো প্রজেক্টে, টিমে কাজ করবেন, তখন কিন্তু commit history টাই হয়ে যাবে একটা timeline — কীভাবে Project এর codebase evolve করলো, কোন কোন change কেন করা হলো, কোন bug fix, কোন feature add… সবকিছু সেই timeline-এ লেখা থাকে। এখন যদি timeline টা হয় শুধু এমন :
update
update
final update
final final update
fixed
ok
তাহলে কিছুদিন গেলে নিজেরই মনে থাকবে না, কোন কমিট আসলে কী করেছিলো। আর টিমে কাজ করলে তো আরো বিপদ! তাহলে সমাধান কী? Semantic commit messages. অর্থপূর্ণ, সহজে বোঝা যায় এমন কমিট মেসেজ — যাতে কমিট history-টাই যাতে কমিট history-টাই হয় একটা গল্পের মতো। একটু একটু করে আপনার প্রজেক্ট দাঁড়ানোর গল্প ।
■ "Semantic Commit" আসলে কী?
"Semantic" মানে হলো meaningful structure. কমিট মেসেজকে এমনভাবে লিখা দরকার যেন তিনটি প্রশ্নের উত্তর দেয়, “which type, where, what” :
কোন type এর change করছি (feature, fix, refactor…)
ঠিক কোথায় change হচ্ছে (scope)
আর অল্প কথায়, কী change হচ্ছে (subject)
এভাবে প্রতিটা মেসেজ দেখলেই বোঝা যাবে: এই কমিট bug fix? নতুন feature? নাকি শুধু documentation?
■ 𝐁𝐚𝐬𝐢𝐜 𝐒𝐲𝐧𝐭𝐚𝐱:
সাধারণত semantic commit message এর গঠন এরকম:
<type>(<scope>): <subject>
type: কী ধরনের commit?scope: কোন ফাইল বা ফিচারের উপর change হচ্ছে (ইচ্ছা করলে বাদও দিতে পারেন)subject: খুব ছোট, imperative sentence — কী change আনছেন
Example:
feat(auth): add JWT-based login
fix(profile): resolve avatar upload bug
docs(readme): update installation guide
refactor(ui): simplify navbar component
test(api): add tests for payment routes
chore(deps): upgrade react to v18
■ 𝐓𝐲𝐩𝐞 𝐛𝐫𝐞𝐚𝐤𝐝𝐨𝐰𝐧:
কিছু common type:
feat | নতুন feature |
fix | bug fix |
docs | documentation change (readme, comments) |
style | formatting only, যেমন space, comma, semicolon, lint fix |
refactor | কোড structure change, কিন্তু behavior same থাকে |
perf | performance optimization |
test | test add বা update |
chore | non-code change, যেমন config, build, deps update |
এগুলো একটা convention — টিমে চাইলে customize ও করা যায়।
■ 𝐖𝐡𝐲 𝐜𝐚𝐫𝐞?
Readable History: কে কখন কোন ফিচার add করেছে, কোন বাগ ফিক্স করেছে — এক ঝলকে দেখা যাবে
Automate Changelog: অনেক tool (যেমন standard-version) এই commit message পড়ে নিজেই changelog তৈরি করে
Better Collaboration: টিমে কে কী কাজ করছে, সহজে বোঝা যায়
Clean Code Culture: discipline, maintainability বাড়ায়
■ 𝐈𝐦𝐩𝐥𝐞𝐦𝐞𝐧𝐭: Hands-on
প্রতিদিন যখন commit করবেন, তখন আর শুধু লিখবেন না:
git commit -m "update"
বরং লিখুন:
git commit -m "feat(auth): implement password reset"
আরও organized হতে চাইলে, conventional commits এর মতো tool use করতে পারেন, যেমন:
commitizen
cz-cli
■ 𝐁𝐞𝐬𝐭 𝐏𝐫𝐚𝐜𝐭𝐢𝐜𝐞𝐬:
- ছোট ও স্পষ্ট subject line
- imperative mood ব্যবহার করুন (add, fix, update; added/fixed/use নয়)
- 50 character এর মধ্যে রাখার চেষ্টা
- দরকার হলে body যোগ করতে পারেন, কিন্তু subject নিজেই অনেক কিছু বলে দেবে
■ 𝐋𝐢𝐟𝐞 𝐨𝐟 𝐚 𝐂𝐨𝐦𝐦𝐢𝐭:
ধরা যাক, আপনার টিমে frontend, backend, documentation টিম একসাথে কাজ করছে। semantic commit message থাকলে শুধু commit log দেখে বোঝা যাবে:
নতুন ফিচার কে করেছে?
কোন bug কখন fix হলো?
কোন scope এ change হচ্ছে?
commit log টা হয়ে যাবে Project এর documentation এর মতো — প্রতিটা commit বুঝাবে, codebase কীভাবে evolved হলো।
■ কিছু প্রশ্নের উত্তর
ধরুন আমি প্রজেক্ট structure চেইঞ্জ করেছি । এটা কী ধরনের কমিট?
- project structure change করা সাধারণত Refactoring এর মধ্যে পড়ে । এমনকি, project এর dependency update করাও একপ্রকার structure change করা । তাই এক্ষেত্রে কমিট টাইপ হওয়া উচিত Refactor.
Unused code delete করাও কী কোনো ধরনের commit?
- যেহেতু এটা প্র্যাক্টিক্যালি প্রোডাকশনে কোনো চেইঞ্জ আনছে না তাই বলা যায় এটা হচ্ছে chore.
■ 𝐑𝐞𝐟𝐞𝐫𝐞𝐧𝐜𝐞𝐬:
[1] https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716
[2] https://www.conventionalcommits.org/en/v1.0.0/
[3] https://www.freecodecamp.org/news/writing-good-commit-messages-a-practical-guide/
"A meaningful commit today saves a debugging headache tomorrow."
