NahdaAIنهضة
Git & GitHub • المستوى الثاني • الدرس 3

معالجة تضارب الأكواد (Resolving Merge Conflicts)

العودة لفهرس المستوى

أهداف الدرس

  • فهم أسباب حدوث الـ Merge Conflict عند تعديل نفس السطر في فرعين مختلفين.
  • قراءة علامات التضارب <<<<<<< و ======= و >>>>>>>.
  • تنفيذ سير عمل الحل: git status git add git commit.
  • التمييز بين نسخة HEAD (الفرع الحالي) ونسخة الفرع المُدمج.

1. كيف يبدو التضارب داخل الملف؟

عندما يتعذر على Git اتخاذ القرار التلقائي، يضع علامات خاصة داخل الملف لتحديد الجزء المتضارب. عليك إزالة العلامات والاحتفاظ بالنص الصحيح يدوياً ثم إتمام الحل بـ Commit.

javascript
// ملف index.js بعد حدوث التضارب
<<<<<<< HEAD
const appTitle = "منصة نهضة التعليمية - النسخة المستقرة";
=======
const appTitle = "منصة نهضة التعليمية - النسخة المحدثة";
>>>>>>> feature/title-update

// بعد الحل اليدوي (احتفظ بالنسخة الصحيحة فقط)
const appTitle = "منصة نهضة التعليمية - النسخة المحدثة";

2. شرح علامات التضارب

<<<<<<< HEAD

بداية الجزء المتضارب. ما يلي هو التعديل الموجود في الفرع الحالي.

=======

الفاصل بين النسختين. ما قبله = نسخة HEAD، وما بعده = نسخة الفرع الآخر.

>>>>>>> branch

نهاية التضارب. اسم الفرع بعد العلامة هو مصدر الجزء الثاني.

3. سير عمل حل التضارب

1. git status

يعرض الملفات المتضاربة تحت قسم Unmerged paths. استخدمه لتحديد الملفات التي تحتاج حلاً.

2. git add <file>

بعد حل التضارب يدوياً في الملف، أخبر Git أنك انتهيت بإضافته للمنطقة المُجهزة.

3. git commit

إتمام عملية الدمج. رسالة مثل fix: resolve merge conflict موصى بها.

git merge --abort

خيار احتياطي لإلغاء الدمج والعودة للحالة قبل المحاولة (عند التعقيد).

التطبيق العملي المباشر

تحدي الدرس الثالث: إتمام حل التضارب خطوة بخطوة

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. هيّئ السيناريو: git init + أول التزام + فرع feature/title-update مع التزام + العودة إلى main مع التزام متعارض.
  2. نفّذ محاولة الدمج git merge feature/title-update (لتفعيل السيناريو).
  3. افحص الحالة بـ git status لرؤية الملفات المُدمجة.
  4. بعد الحل اليدوي (خارج المحاكي)، أضف الملف المحلول: git add index.js.
  5. أكمل الحل بـ git commit -m "fix: resolve merge conflict in app title".
  6. تحقق من السجل النهائي بـ git log --oneline.
⏳ جارٍ تحميل المحرر التفاعلي...