Git & GitHub📅 2026-11-23⏱ 7 دقائق قراءة🔧 مقال 3 من 10

الـ Commits في Git — دليل شامل 2026

دليل عملي مفصل للـ Commits في Git — كيف تكتب commits احترافية، Conventional Commits، والرجوع

في المقال السابق، أنشأت أول مستودع وقمت بأول commit. الآن سنتعمق في Commits — وهي الوحدة الأساسية في Git.

في هذا الدليل العملي، سنأخذك خطوة بخطوة لفهم Commits الاحترافية، مع تمارين وحلول.

ما هو Commit؟

Commit هو لقطة (Snapshot) من مشروعك في لحظة معينة.

تشبيه بسيط: تخيل أن Commit هو صورة فوتوغرافية لمشروعك:

  • تُظهر حالة الملفات في لحظة معينة.
  • لها رسالة تصف ما تغيّر.
  • لها تاريخ و مؤلف.
  • يمكنك الرجوع إليها في أي وقت.

كل Commit يحتوي على:

العنصرالوصف
Hashمعرّف فريد (SHA-1)
Authorمن كتب الكود
Dateمتى كُتب
Messageوصف التغيير
Parentالـ commit السابق
Changesالملفات المتغيرة

كيف تكتب Commit جيد؟

القواعد الذهبية:

  1. قصير: لا يزيد عن 50 حرفاً.
  2. واضح: يصف ماذا تغيّر، ولماذا.
  3. بصيغة الأمر: "إضافة"، "إصلاح"، "تحديث".
  4. بالعربية أو الإنجليزية: اختر واحدة والتزم بها.

أمثلة:

✅ جيدة:

إضافة صفحة الاتصال
إصلاح خطأ في تسجيل الدخول
تحديث مكتبة React إلى 19
إزالة الكود المكرر

❌ سيئة:

تعديل
commit
fixed
asdfasdf
تحديثات كثيرة

Conventional Commits

Conventional Commits هو معيار عالمي لكتابة Commits احترافية.

الصيغة:

<type>(<scope>): <description>

الأنواع الشائعة:

النوعالوصفمثال
featميزة جديدةfeat: إضافة تسجيل الدخول
fixإصلاح خطأfix: إصلاح خطأ في النموذج
docsتوثيقdocs: تحديث README
styleتنسيق (بدون منطق)style: تنسيق الكود
refactorإعادة هيكلةrefactor: تقسيم الدوال
testاختباراتtest: إضافة اختبارات
choreمهام روتينيةchore: تحديث المكتبات

أمثلة كاملة:

feat(auth): إضافة تسجيل الدخول بالبريد
fix(api): إصلاح خطأ في تحميل البيانات
docs(readme): تحديث دليل التثبيت
refactor(utils): تقسيم الدوال المساعدة
chore(deps): تحديث React إلى 19

Commit Message Body

للـ Commits المعقدة، أضف تفاصيل:

git commit -m "feat(auth): إضافة تسجيل الدخول بالبريد" -m "- إضافة صفحة تسجيل الدخول
- ربط API المصادقة
- إضافة التحقق من البيانات
- إضافة معالجة الأخطاء"

النتيجة:

feat(auth): إضافة تسجيل الدخول بالبريد

- إضافة صفحة تسجيل الدخول
- ربط API المصادقة
- إضافة التحقق من البيانات
- إضافة معالجة الأخطاء

عرض السجل

1. السجل الكامل

git log

2. السجل المختصر

git log --oneline

النتيجة:

abc1234 feat: إضافة تسجيل الدخول
def5678 fix: إصلاح خطأ في النموذج
ghi9012 docs: تحديث README

3. السجل المختصر مع الفروع

git log --oneline --graph --all

4. سجل ملف معين

git log --oneline README.md

5. سجل شخص معين

git log --author="Ahmed"

6. سجل فترة زمنية

git log --since="2 weeks ago"
git log --until="2026-11-01"

تعديل آخر Commit

1. تعديل الرسالة فقط

git commit --amend -m "رسالة جديدة"

2. إضافة ملفات لآخر Commit

git add forgotten-file.txt
git commit --amend --no-edit

⚠️ تحذير: لا تعدّل Commits مرفوعة إلى GitHub (إلا إذا كنت وحدك).

الرجوع إلى Commit سابق

1. عرض التغييرات قبل الرجوع

git log --oneline

2. الرجوع مع الاحتفاظ بالتغييرات (Soft Reset)

git reset --soft HEAD~1

النتيجة: يُلغي آخر commit، لكن التغييرات تبقى في Staging.

3. الرجوع مع الاحتفاظ بالملفات (Mixed Reset — افتراضي)

git reset HEAD~1

النتيجة: يُلغي آخر commit، والتغييرات تبقى في Working Directory.

4. الرجوع مع حذف التغييرات (Hard Reset)

git reset --hard HEAD~1

⚠️ تحذير: يحذف كل التغييرات!

5. الرجوع لـ Commit معين

git reset --hard abc1234

التراجع عن Commit مرفوع

استخدم revert بدلاً من reset:

git revert abc1234

النتيجة: يُنشئ commit جديد يُلغي التغييرات.

استرجاع ملف من Commit قديم

git checkout abc1234 -- README.md

النتيجة: يُعيد README.md كما كان في commit abc1234.

إلغاء git add

# ملف واحد
git restore --staged file.txt

# كل الملفات
git restore --staged .

أو القديم:

git reset HEAD file.txt

حذف ملف من Git (مع الاحتفاظ به محلياً)

git rm --cached file.txt

الفائدة: للملفات التي يجب أن تكون في .gitignore.

مثال عملي: مشروع متكامل

السيناريو: بناء تطبيق مهام

الخطوة 1: إعداد المشروع

mkdir todo-app
cd todo-app
git init

الخطوة 2: إضافة الملفات الأساسية

echo "# Todo App" > README.md
git add README.md
git commit -m "docs: إضافة README"

الخطوة 3: إضافة package.json

npm init -y
git add package.json
git commit -m "chore: إعداد package.json"

الخطوة 4: إضافة الكود

mkdir src
echo "console.log('Hello');" > src/index.js
git add .
git commit -m "feat: إضافة الدالة الرئيسية"

الخطوة 5: إضافة .gitignore

echo "node_modules/" > .gitignore
git add .gitignore
git commit -m "chore: إضافة .gitignore"

السجل:

git log --oneline

النتيجة:

d4e5f6g chore: إضافة .gitignore
c3d4e5f feat: إضافة الدالة الرئيسية
b2c3d4e chore: إعداد package.json
a1b2c3d docs: إضافة README

🎉 سجل احترافي!

تمارين عملية

تمرين 1: أول Commit

أنشئ ملفاً واعمل commit.

الحل:

echo "مرحباً" > hello.txt
git add hello.txt
git commit -m "feat: إضافة ملف الترحيب"

تمرين 2: Conventional Commit

اكتب commit بصيغة Conventional.

الحل:

git commit -m "feat(auth): إضافة تسجيل الدخول"

تمرين 3: عرض السجل

اعرض آخر 5 commits.

الحل:

git log --oneline -5

تمرين 4: تعديل آخر Commit

عدّل رسالة آخر commit.

الحل:

git commit --amend -m "feat: رسالة جديدة"

تمرين 5: إلغاء git add

أضف ملفاً ثم ألغِ الإضافة.

الحل:

git add file.txt
git restore --staged file.txt

تمرين 6: الرجوع

ارجع لـ commit سابق مع الاحتفاظ بالتغييرات.

الحل:

git reset --soft HEAD~1

تمرين 7: استرجاع ملف

استرجع ملفاً من commit قديم.

الحل:

git checkout abc1234 -- README.md

تمرين 8: مشروع كامل

أنشئ مشروعاً مع 5 commits احترافية.

الحل: (راجع المثال العملي أعلاه)

حل المشاكل الشائعة

🔴 المشكلة 1: nothing to commit

السبب: لا توجد تغييرات.

الحل: تأكد من تعديل الملفات، ثم:

git status

🔴 المشكلة 2: نسيت -m

النتيجة: سيفتح محرر. اكتب الرسالة، احفظ، وأغلق.

لتجنب ذلك:

git config --global core.editor "code --wait"

🔴 المشكلة 3: fatal: not a git repository

الحل:

git init

🔴 المشكلة 4: أخطأت في رسالة commit

الحل:

git commit --amend -m "الرسالة الصحيحة"

🔴 المشكلة 5: أريد حذف آخر commit

الحل:

git reset --hard HEAD~1

⚠️ تحذير: يحذف التغييرات!

جدول أوامر Commits

الأمرالوظيفة
git commit -m "msg"إنشاء commit
git commit -am "msg"إضافة + commit
git commit --amendتعديل آخر commit
git logعرض السجل
git log --onelineسجل مختصر
git show abc123تفاصيل commit
git reset --soft HEAD~1إلغاء commit (ناعم)
git reset --hard HEAD~1إلغاء commit (قوي)
git revert abc123عكس commit
git restore --staged .إلغاء git add

قائمة تحقق نهائية

المهمةالحالة
فهم ما هو Commit⬜
كتابة commits واضحة⬜
Conventional Commits⬜
عرض السجل⬜
تعديل آخر Commit⬜
الرجوع لـ Commit سابق⬜
حل التمارين الثمانية⬜

ماذا بعد هذا المقال؟

الآن بعد أن أتقنت Commits، أنت جاهز للمقال التالي:

  1. الفروع (Branches) — العمل على ميزات متعددة.
  2. الدمج (Merge) — دمج الفروع.
  3. GitHub — Pull Requests.

الخلاصة

في هذا المقال، تعلمت:

  • ✅ ما هو Commit.
  • ✅ كيف تكتب commits احترافية.
  • ✅ Conventional Commits.
  • ✅ عرض السجل.
  • ✅ تعديل آخر Commit.
  • ✅ الرجوع لـ Commit سابق.
  • ✅ حل 8 تمارين عملية.

تذكر: Commit جيد = تاريخ مشروع نظيف = فريق سعيد.

📚 مقالات ذات صلة

Git & GitHub

مشروع Git متكامل — تعاون على مستودع احترافي 2026

مشروع عملي شامل للتعاون على مستودع Git — فروع، PRs، مراجعة، CI/CD، وإصدارات

Git & GitHub

Git Workflow احترافي — دليل شامل 2026

دليل عملي مفصل لـ Git Workflow الاحترافي — Git Flow، GitHub Flow، Trunk-based، وأفضل الممارسات

Git & GitHub

حل التعارضات في Git — دليل شامل 2026

دليل عملي مفصل لحل التعارضات في Git — أنواع التعارضات، الأخطاء الشائعة، وأدوات المساعدة