الخطوات
-
1
أبقِ سطر الموضوع أقل من 50 حرفًا
السطر الأول من رسالة الـ commit هو الموضوع. يقطع GitHub الرسائل عند 72 حرفًا؛ وكثير من الطرفيات عند 80. استهدف 50 حرفًا ليتناسب بوضوح مع
git log --onelineوعرض GitHub والإشعارات البريدية. إذا لم تستطع التلخيص في 50 حرفًا، فالـ commit على الأرجح كبير جدًا.bash# طويل جدًا — صعب المسح Fix the issue where authenticated users were being redirected to the login page after session expiry instead of refreshing the token # جيد Fix token refresh redirect for authenticated users -
2
استخدم صيغة الأمر في الموضوع
اكتب الموضوع كأنك تُكمل جملة \"إذا طُبّق، سيقوم هذا الـ commit بـ...\". هذا يعني: Fix، Add، Remove، Update، Refactor — وليس "Fixed" أو "Adding" أو "Various changes".
bash# خاطئ Fixed broken login Adding dark mode support I changed the timeout value # صحيح Fix broken login redirect Add dark mode support Change timeout from 3s to 5s -
3
اترك سطرًا فارغًا قبل نص الرسالة
يتعامل Git مع الفقرة الأولى بوصفها الموضوع وكل شيء بعد سطر فارغ بوصفه نص الرسالة. بدون هذا السطر الفارغ، لا تستطيع أدوات مثل
git log --onelineوGitHub وكثير من عملاء البريد التمييز بين الموضوع والنص. السطر الفارغ ليس اختياريًا.bashFix token refresh redirect for authenticated users The session middleware was checking token expiry before the refresh handler ran, causing a redirect to /login even when a valid refresh token existed. Reorder the middleware chain to fix this. Fixes #218 -
4
اشرح لماذا لا ماذا في نص الرسالة
الـ diff يُظهر بالفعل ما تغيّر. استخدم النص لشرح السبب والمقايضة التي اخترتها والبديل الذي رفضته. التزم بـ 72 حرفًا لكل سطر حتى يُعرض النص بوضوح في الطرفيات.
bash# نص غير مفيد — يصف الـ diff فقط Changed timeout from 3000 to 5000 in config/app.js # نص مفيد — يشرح المنطق Increase API timeout from 3s to 5s The third-party payment gateway occasionally takes 4–4.5s on the first request after a cold start. Users were seeing spurious payment errors. The gateway's SLA guarantees responses within 5s. -
5
اعتمد Conventional Commits للأتمتة
Conventional Commits معيار خفيف يُضيف بادئة نوع إلى الموضوع:
feat:،fix:،chore:،docs:،refactor:،test:. أدوات مثل semantic-release وstandard-version تقرأ هذه البوادئ لتوليد سجلات التغييرات وترقيات الإصدار تلقائيًا — دون ملاحظات إصدار يدوية.bashfeat: add OAuth2 login with Google fix: correct cart total when discount code applied chore: upgrade Laravel from 11 to 12 docs: document the deployment workflow in CLAUDE.md refactor: extract payment logic into PaymentService test: add unit tests for CartController # تغيير جذري — أضف ! وفوتر: feat!: rename /api/v1 to /api/v2 BREAKING CHANGE: All clients must update their base URL. -
6
أشر إلى المشكلات وطلبات السحب
اربط الـ commits بتذكر المشكلات حتى يتمكن القراء مستقبلًا من الانتقال مباشرة للنقاش الكامل. يغلق GitHub المشكلات تلقائيًا عندما يصل commit يحتوي على
Fixes #Nإلى الفرع الافتراضي.bashfix: prevent double-submit on payment form Disable the submit button immediately on click and re-enable it only if the API returns an error. Previously, slow connections allowed users to click twice, creating duplicate charges. Fixes #312 See also: #298 -
7
اضبط محررك لرسائل الـ commit
كتابة رسائل commit متعددة الأسطر في الطرفية أمر مُرهق. اضبط المحرر المفضل لديك حتى يفتح Git ملفًا حقيقيًا عند تشغيل
git commit(بدون-m). خيار--waitفي VS Code يجعله يتوقف حتى تغلق الملف.bash# VS Code git config --global core.editor "code --wait" # Vim git config --global core.editor "vim" # Nano git config --global core.editor "nano" # ثم شغّل فقط: git commit # سيفتح Git المحرر؛ احفظ وأغلق لإتمام الـ commit.
نصائح ومحاذير
- "wip" و"minor fix" و"updates" و"asdf" ليست رسائل commit. نفسك المستقبلية في الساعة 2 صباحًا تُصحح إنتاج لن تشكرك على هذا.
- إذا احتجت كلمة "و" لوصف commit، فيجب على الأرجح أن يكون commit-ين منفصلين.
- العرض <code>git log --oneline --graph</code> يُكافئ سطور الموضوع الجيدة — السيئة تجعل السجل غير قابل للقراءة.
- للفرق، أضف ملف قالب <code>.gitmessage</code> واضبط <code>git config commit.template .gitmessage</code> لتوجيه الجميع نحو المعيار.
خاتمة
كتابة رسالة commit جيدة تستغرق 90 ثانية إضافية وتوفر ساعات من التحقيق بعد ستة أشهر. العادة تتراكم: حين يكتب فريقك كله رسائل واضحة، يصبح git log دفتر قرارات قابل للبحث بدلًا من قائمة بالتواريخ وهاشات SHA. ابدأ بصيغة الأمر وسطر موضوع من 50 حرفًا — كل شيء آخر سيأتي تلقائيًا.