Git و GitHub

إجراء الالتزامات (Commits)

13 دقيقة الدرس 6 من 35

إجراء الالتزامات (Commits)

الالتزامات هي وحدات البناء الأساسية لتاريخ مشروعك. في هذا الدرس، ستتعلم كيفية إنشاء التزامات ذات معنى، وكتابة رسائل التزام فعالة، واتباع أفضل الممارسات التي ستجعل تاريخ مستودعك واضحاً ومفيداً.

أساسيات Git Commit

الالتزام هو لقطة من مستودعك في نقطة زمنية محددة. يسجل ما تغير، من أجرى التغيير، متى تم، ولماذا تم.

# أمر الالتزام الأساسي git commit -m "رسالة الالتزام الخاصة بك" # فتح المحرر الافتراضي لرسالة أطول git commit # التنظيم والالتزام في خطوة واحدة (ملفات متتبعة فقط) git commit -am "رسالة التزام سريعة"
حقيقة مهمة: كل التزام في Git له hash SHA-1 فريد (مثل 2f8a7e9d3b...) يحدد هويته. هذا يضمن سلامة البيانات ويسهل الإشارة إلى التزامات محددة.

تشريح رسالة الالتزام

رسالة الالتزام جيدة التنظيم تحتوي على ثلاثة أجزاء:

السطر الموضوعي (مطلوب): - ملخص قصير (50 حرفاً أو أقل) - صيغة الأمر ("أضف ميزة" وليس "أضفت ميزة") - بدون نقطة في النهاية المتن (اختياري): - شرح تفصيلي لماذا وكيف - مُلتف عند 72 حرفاً - مفصول عن الموضوع بسطر فارغ التذييل (اختياري): - إشارات للمشاكل (Closes #123) - تغييرات كاسرة - المؤلفون المشاركون

كتابة رسائل التزام رائعة

قارن هذه الأمثلة:

❌ أمثلة سيئة: git commit -m "fixed bug" git commit -m "updates" git commit -m "asdfasdf" git commit -m "Changed some stuff" ✅ أمثلة جيدة: git commit -m "Fix login validation for empty passwords" git commit -m "Add user avatar upload feature" git commit -m "Refactor database connection logic" git commit -m "Update dependencies to latest versions"
نصيحة: أكمل هذه الجملة: "إذا تم تطبيقه، سيقوم هذا الالتزام بـ..." - يجب أن تتناسب رسالة الالتزام الخاصة بك بشكل طبيعي بعدها. مثال: "إذا تم تطبيقه، سيقوم هذا الالتزام بـ إصلاح التحقق من تسجيل الدخول لكلمات المرور الفارغة."

استخدام المحرر لرسائل مفصلة

للتغييرات المعقدة، استخدم المحرر الكامل:

# فتح المحرر بدون علامة -m git commit # مثال على رسالة التزام مفصلة: Add user authentication system Implement JWT-based authentication with the following features: - User registration with email verification - Login with username/email and password - Password reset functionality - Token refresh mechanism This addresses security concerns raised in issue #45 and provides the foundation for role-based access control in future updates. Closes #45

تنسيق الالتزامات التقليدية (Conventional Commits)

تتبع العديد من الفرق مواصفات الالتزامات التقليدية لتوحيد رسائل الالتزام:

التنسيق: <type>(<scope>): <subject> الأنواع الشائعة: feat: ميزة جديدة fix: إصلاح خطأ docs: تغييرات في التوثيق style: نمط الكود (تنسيق، بدون تغيير منطقي) refactor: إعادة هيكلة الكود (بدون تغيير ميزة/خطأ) test: إضافة أو تحديث الاختبارات chore: عملية البناء، التبعيات، الأدوات أمثلة: feat(auth): add social media login options fix(cart): prevent duplicate items in shopping cart docs(api): update authentication endpoint examples refactor(database): optimize query performance test(user): add integration tests for registration
الفوائد: الالتزامات التقليدية تسهل إنشاء سجلات التغيير تلقائياً، وتحديد زيادات الإصدار، وفهم تاريخ المشروع بنظرة واحدة.

تعديل الالتزامات

هل ارتكبت خطأ في التزامك الأخير؟ يمكنك إصلاحه:

# نسيت إضافة ملف؟ git add forgotten-file.txt git commit --amend --no-edit # تريد تغيير رسالة الالتزام؟ git commit --amend -m "رسالة التزام أفضل" # فتح المحرر لتعديل الرسالة وإضافة المزيد من التغييرات git add another-file.txt git commit --amend
تحذير: قم بتعديل الالتزامات التي لم يتم دفعها إلى مستودع مشترك فقط! التعديل يغير hash الالتزام، مما قد يسبب مشاكل للمتعاونين الذين لديهم بالفعل الالتزام الأصلي.

الالتزامات المشتركة (Co-Authored)

عند البرمجة الزوجية أو التعاون، أعط الفضل للمؤلفين المشاركين:

git commit -m "Implement payment processing system Co-authored-by: Jane Smith <jane@example.com> Co-authored-by: Bob Johnson <bob@example.com>"

أفضل الممارسات للالتزامات

✓ افعل: - اجعل الالتزامات ذرية (تغيير منطقي واحد لكل التزام) - التزم بشكل متكرر (على الأقل يومياً) - اكتب رسائل التزام وصفية - استخدم صيغة الأمر ("أضف" وليس "أضفت") - أشر إلى المشاكل عند الاقتضاء - راجع التغييرات قبل الالتزام (git diff --staged) ✗ لا تفعل: - تلتزم بتغييرات غير مرتبطة معاً - تستخدم رسائل غامضة مثل "fix" أو "update" - تلتزم بكود مكسور/غير مختبر - تضمن بيانات حساسة (كلمات مرور، مفاتيح API) - تلتزم بملفات مُولدة (إلا إذا كان ضرورياً) - تنتظر طويلاً بين الالتزامات

أمثلة عملية

لنمر عبر سير عمل كامل:

# إجراء تغييرات على الملفات echo "console.log('Hello World');" > app.js # فحص الحالة git status # تنظيم التغييرات git add app.js # مراجعة ما سيتم الالتزام به git diff --staged # الالتزام برسالة وصفية git commit -m "Add initial JavaScript application entry point" # عرض تاريخ الالتزامات git log --oneline

رسائل التزام متعددة الأسطر في Terminal

يمكنك إنشاء رسائل التزام مفصلة مباشرة في Terminal:

# الطريقة 1: علامات -m متعددة git commit -m "Add user profile page" -m "Features included:" -m "- Avatar upload" -m "- Bio editing" -m "- Social links" # الطريقة 2: اضغط Enter داخل الاقتباسات (معظم الـshells) git commit -m "Add user profile page Features included: - Avatar upload - Bio editing - Social links"
نصيحة احترافية: قم بإعداد قوالب رسائل الالتزام للحفاظ على الاتساق عبر فريقك. أنشئ ملف قالب وقم بتكوين Git لاستخدامه: git config --global commit.template ~/.gitmessage

قوالب رسائل الالتزام

أنشئ ملف قالب لرسائل التزام متسقة:

# أنشئ ملف قالب: ~/.gitmessage # السطر الموضوعي (50 حرفاً كحد أقصى) # المتن: اشرح ماذا ولماذا (التف عند 72 حرفاً) # التذييل: إشارات المشاكل، التغييرات الكاسرة # مثال: Closes #123 # تذكر: # - استخدم صيغة الأمر ("أضف" وليس "أضفت") # - افصل الموضوع عن المتن بسطر فارغ # - اشرح لماذا، وليس فقط ماذا # ثم قم بتكوين Git لاستخدامه: git config --global commit.template ~/.gitmessage

تمرين تطبيقي:

السيناريو: لقد أضفت ميزة تحقق جديدة لكلمة المرور تتحقق من الحد الأدنى للطول، والأحرف الخاصة، وتمنع كلمات المرور الشائعة. اكتب رسالة التزام تتبع أفضل الممارسات.

مهمتك:

  1. اكتب سطراً موضوعياً (50 حرفاً أو أقل)
  2. أضف متناً مفصلاً يشرح ماذا ولماذا
  3. ضمّن تذييلاً يشير إلى المشكلة #67

نموذج إجابة:

Add enhanced password validation system Implement comprehensive password strength checking with: - Minimum 8 characters requirement - At least one special character validation - Common password dictionary check (top 10,000) - Real-time feedback during user input This improves account security and addresses user concerns about weak passwords. The validation happens both on the client side (instant feedback) and server side (security). Closes #67

عرض الالتزام الخاص بك

بعد الالتزام، تحقق من عملك:

# إظهار تفاصيل آخر التزام git show # إظهار آخر التزام مع تغييرات الملفات git show HEAD # إظهار التزام محدد git show 2f8a7e9 # إظهار رسالة الالتزام فقط git log -1

الملخص

في هذا الدرس، تعلمت:

  • كيفية إنشاء التزامات باستخدام git commit
  • تشريح رسالة التزام رائعة (موضوع، متن، تذييل)
  • أفضل الممارسات للالتزامات الذرية والمفيدة
  • تنسيق الالتزامات التقليدية للتوحيد القياسي
  • كيفية تعديل الالتزامات (للتغييرات غير المدفوعة فقط)
  • إضافة مؤلفين مشاركين للالتزامات التعاونية
  • استخدام قوالب رسائل الالتزام للاتساق
التالي: في الدرس التالي، سنستكشف كيفية عرض وتحليل تاريخ مشروعك باستخدام Git log والأوامر القوية الأخرى!

ES
Edrees Salih
منذ 13 ساعة

We are still cooking the magic in the way!