تشغّل git merge أو git pull فتظهر الرسالة المخيفة:
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.
اهدأ — لم يضِع شيء ولم ينكسر شيء. Git فقط يقول: "شخصان عدّلا نفس الأسطر، ولن أخمّن أيّهما الصحيح — قرّر أنت".
لماذا يحدث التعارض؟
Git يدمج الفروع تلقائيًّا ببراعة ما دام كل تعديل في أسطر مختلفة. التعارض يحدث فقط عندما:
- عدّل فرعان نفس الأسطر في نفس الملف، أو
- حذف أحدهما ملفًّا عدّله الآخر.
شكل التعارض داخل الملف
افتح الملف المذكور في الرسالة وسترى:
<<<<<<< HEAD
const tax = 0.15; // نسختك (الفرع الحالي)
=======
const tax = 0.16; // نسخة الفرع الآخر
>>>>>>> feature/new-tax
اقرأها هكذا:
| العلامة | معناها |
|---|---|
<<<<<<< HEAD | بداية نسختك الحالية |
======= | الفاصل بين النسختين |
>>>>>>> اسم-الفرع | نهاية نسخة الفرع الآخر |
الحل خطوة بخطوة
1) اعرف أي الملفات متعارضة
git status
# Unmerged paths:
# both modified: app.js
2) افتح الملف وقرّر
احذف العلامات الثلاث واترك الكود النهائي. أمامك ثلاثة خيارات:
// الخيار أ: تُبقي نسختك
const tax = 0.15;
// الخيار ب: تأخذ نسختهم
const tax = 0.16;
// الخيار ج: تدمج بنفسك (الأفضل غالبًا)
const tax = getTaxRate(country);
⚠️ تأكد من حذف أسطر
<<<<<<<و=======و>>>>>>>كلها — نسيان واحدة منها يكسر تشغيل الكود، وهي أشهر هفوة بعد أول تعارض.
3) أعلِم Git أنك انتهيت
git add app.js # "حللت التعارض في هذا الملف"
git commit # يُنهي الدمج برسالة جاهزة تلقائيًا
مع git pull الحديث قد تحتاج git merge --continue بدل git commit —
كلاهما يؤدي نفس الغرض.
طريق الهروب: التراجع الكامل
غير جاهز للتعامل مع التعارض الآن؟ أعد كل شيء كما كان قبل الدمج:
git merge --abort
الحل من VS Code (أسهل للمبتدئين)
عند فتح ملف متعارض في VS Code يظهر فوق كل تعارض أزرار جاهزة:
- Accept Current Change — يُبقي نسختك.
- Accept Incoming Change — يأخذ نسخة الفرع الآخر.
- Accept Both Changes — يضع النسختين معًا.
وزر Resolve in Merge Editor يفتح عرضًا ثلاثيًّا (نسختك | النتيجة |
نسختهم) يجعل التعارضات الكبيرة أوضح بكثير. بعد الانتهاء: git add ثم
git commit كالمعتاد.
كيف تقلّل التعارضات مستقبلًا؟
- اسحب باستمرار:
git pullقبل بدء العمل وقبل أي دمج. - فروع صغيرة قصيرة العمر — فرع يعيش أسبوعين يتعارض حتمًا.
- قسّم الملفات الضخمة — ملف واحد يلمسه الجميع = مصنع تعارضات.
- نسّق مع فريقك من يعمل على أي ملف.
الخلاصة
تعارض الدمج ليس خطأً بل سؤال: "أي نسخة تريد؟". الإجابة دائمًا ثلاث
خطوات: افتح الملف واحذف العلامات واترك الكود الصحيح ← git add ←
git commit. وإذا ضاق صدرك: git merge --abort يعيدك لنقطة البداية بأمان.
أتقن الفروع والدمج في مسار Git بالعربي، واقرأ الفرق بين Git و GitHub و حل خطأ fatal: not a git repository.