چگونه در git یک commit خوب بزنیم!؟
اگه تا حالا با گیت کار کردی، حتماً میدونی که کامیت زدن یکی از مهمترین کارای روزمرهته. ولی خیلیها هنوز پیامهای کامیت رو الکی و بیسر و ته مینویسن این فاجعهاس. چرا؟ چون فلسفه commit رو از بین میبره. تو این مطلب میخوام بهتون بگم چطوری یه کامیت حرفهای و تمیز بزنید. مخصوصاً با روشی که این روزا خیلی مد شده و تو پروژههای اوپنسورس و تیمهای بزرگ حسابی طرفدار داره. در ابتدا و قبل از چگونگی انجام این فرآیند یعنی دستور commit در git توضیح کوتاهی درباره آن بهتون ارائه می کنم.
کامیت در گیت چیست؟
کامیت (commit) تو گیت یه جور ثبت و ضبط تغییرات پروژهاس. هر بار که یه سری فایل رو تغییر میدید و به گیت میگین «اینارو ذخیره کن»، یه کامیت جدید ساخته میشه.
هر کامیت یه شناسهی یکتایی داره که بعداً میتونی باهاش برگردی به همون نقطه. و مهمتر از همه، شامل پیامیه که شما توضیح میدی چه تغییراتی رو ایجاد کردی.
کامیتها باعث میشن تغییراتت گم نشه و بتونی تاریخچهی پروژه رو کامل کنترل کنی.
یکی از چیزایی که حسابی نشون میده تو برنامهنویس حرفهای هستی، همون پروفایل گیتهابته. مخصوصاً اگه دنبال مهاجرت یا کار ریموت هستی، کارفرما اول میره گیتهاب تو رو چک میکنه. پس کامیتهای تمیز و مرتب، خیلی بهت امتیاز میده.
قبل از commit زدن باید چه نکاتی رعایت کنیم؟
قبل از اینکه کامیت بزنی، یه کم حواستون باشه:
- تغییراتت رو یه دور کامل چک کنین. مطمئن شین فایلهایی که اضافه یا حذف کردی درستن و چیزی جا نمونده.
- پیام کامیت باید واضح و دقیق باشه. نه خیلی کوتاه و مبهم، نه یه داستان حسین کُرد شبستری طولانی. 😁
- اگه شک داشتین چی نوشتین، با دوستاتون یا همتیمیهاتون یه بررسی نهایی بکنین.
- اگه نیاز به توضیح بیشتر دارین، میتونین از کامیت چندخطی استفاده کنی (با git commit بدون -m).
- قبل از کامیت، مطمئن شین کدت درست کار میکنه و پیشنیازهای پروژه رو رعایت کردین.
- اطلاعات کاربریتون رو تو گیت تنظیم کرده باشی:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
اینا رو رعایت کنی، خیالتون راحتتره که کامیتت تمیز درمیاد. اما هنوز کار یه کم دیگه داریم باهم.
چگونگی نوشتن یک commit خوب در گیت
روش مدرن و استاندارد: Conventional Commits
توی این روش، پیام کامیت یه ساختار مشخص داره:
نوع(محدوده): توضیح کوتاه
مثلاً:
feat(back-end): add user authentication
fix(front-end): resolve overlap between logout button and avatar
refactor(db): redesign user table to encrypt password
این روش باعث میشه تاریخچهی پروژهات خیلی خواناتر بشه، اتوماتیک changelog ساخته بشه و حتی ابزارهای مختلف بتونن ازش استفاده کنن.
جدول زیر انواع رایج این پیشوندها رو نشون میده:
| مثال | معنی | پیشوند |
|---|---|---|
| feat: add user authentication | ویژگی جدید | feat |
| fix: resolve login error | رفع باگ | fix |
| docs: update README | تغییرات مستندسازی | docs |
| style: improve code formatting | تغییرات فرمت/استایل (بدون تغییر منطق) | style |
| refactor: simplify user model | بازنویسی کد بدون تغییر رفتار | refactor |
| test: add login validation | افزودن یا تغییر تستها | test |
| chore: update dependencies | کارهای معمولی پروژه | chore |
| perf: optimize database query | بهینهسازی عملکرد | perf |
میتونی بعد از نوع، یه محدوده هم بذاری (مثل back-end یا ui) تا مشخصتر بشه کجا تغییر کردی.
جزئیات مهم برای نوشتن پیام کامیت خوب
اینا نکاتیه که خیلیها فراموش میکنن و باعث میشه کامیتهاشون ضعیف بشه:
- از فعل ماضی استفاده نکنین
پیام کامیت باید به صورت امری و زمان حال نوشته بشه (مثل دستور دادن به گیت).اشتباه: added user authentication یا fixed the bug
درست: add user authentication یا fix login errorانگار داری به گیت میگی «این کار رو انجام بده». - توضیحات بیشتر (body) بنویسین
خط اول (subject) باید کوتاه و خلاصه باشه (معمولاً زیر ۷۲ کاراکتر).
اگه نیاز به توضیح بیشتر دارین، بعد از یه خط خالی، جزئیات رو بنویسین.
مثلاً چرا این تغییر لازم بود، چی عوض شد، یا چه چیزی هنوز کامل نشده. - چند کار مختلف رو تو یه کامیت قاطی نکن
هر کامیت باید فقط یه کار منطقی و مستقل باشه (atomic commit).
اگه هم فیچر اضافه کردی، هم باگ فیکس کردی، هم تست نوشتی، جداشون کن، تا حد ممکن مگر این که مجبور بشی.
اینطوری بعداً اگه خواستی یه تغییر خاص رو برگردونی یا بازنگری (review) کنی، خیلی راحتتره. - پیامهای حاشیه و وضعیت موقت رو فراموش نکن.
گاهی وقتا کار هنوز کامل نشده. میتونی تو توضیحات بنویسین:WIP: need to add tests to ensure this function works perfectlyیا از کلمات کلیدی مثل BREAKING CHANGE: برای تغییرات بزرگ استفاده کنین.
- نکات دیگه که خیلی کمک میکنه:
- نقطه در انتهای خط اول نذارین.
- از کلمات واضح و انگلیسی ساده استفاده کنین (حتی اگه پروژهاتون فارسیه، پیامهای کامیت معمولاً انگلیسی نوشته میشن).
- اگه تغییر خیلی مهمه یا API رو به فنا میده، حتماً تو body توضیح بدین که ملت هم بفهمن هدف شما چی بوده.
چند نمونه پیام commit خوب در گیت (با توضیح)
در آخر چند تا مثال میارم که براتون بیشتر جا بیوفته چطور بنویسیم:
feat(auth): add JWT-based user authentication
تو این کامیت خیلی واضح مشخص شده که یه امکان جدید به پروژه اضافه شده. این امکان بخش auth رو درگیر کرده و روش JWT برای احراز هویت کاربر پیادهسازی شده.
fix(ui): resolve logout button overlapping with avatar on mobile
اینجا دقیقاً گفته شده یه باگ ظاهری فیکس شده. مشکل مربوط به تداخل دکمهی لاگاوت و آواتار تو حالت موبایل بوده.
refactor(db): redesign user table to encrypt password
این کامیت نشون میده ساختار جدول کاربر تغییر کرده، ولی رفتار کلی سیستم عوض نشده. فقط پسورد دیگه به صورت plain text ذخیره نمیشه و رمزنگاری میشه.
docs: update installation steps in README
یه تغییر ساده و تمیز تو مستندات. فقط بخش نصب پروژه تو فایل README بهروز شده.
test(auth): add unit tests for login validation
اینجا فقط تست اضافه شده. هیچ منطق جدیدی به خود کد اصلی اضافه نشده.
نمونهای که هنوز کامل نشده (با پیام حاشیه):
feat(auth): add JWT-based user authentication
WIP: need to develop tests to ensure this function works perfectly
خط اول فیچر اصلی رو اعلام میکنه. تو توضیحات هم مشخص کرده که کار هنوز تموم نشده و تستها مونده. اینطوری بقیه اعضای تیم میفهمن وضعیت چیه.
chore: upgrade react and related dependencies to latest
کار معمولی پروژه. فقط وابستگیها آپدیت شدن و هیچ فیچر یا فیکسی در کار نیست.
با رعایت این جزئیات، کامیتهاتون هم خواناتر میشن، هم حرفهایتر به نظر میرسن و هم تو کار تیمی کلی درد سر یو کم میکنن.
حالا برین و از این به بعد کامیتهات رو با این استاندارد بزنین! 😉
اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم.
در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :
Delphi, Rust ,PHP, JavaScript, Unreal engine, asm, Dart
و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم.
تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه.
یا حق، با حق، تا حق

شاید امروز جواب خیلی از سؤالها را بتوان از AI گرفت، اما تولید مطالب تخصصی، تجربهمحور و عمیق هنوز به انگیزه نیاز دارد. این نظرات و بازخوردهای شماست که به ما نشان میدهد ادامه دادن این مسیر ارزشمند است.
دیدگاه شما چیست؟