Git Merge
آخر تحديث
git merge يجلب الـ commits من فرع آخر إلى فرعك الحالي. عندما لا يكون الفرع الحالي قد تباعد، ينفّذ Git عملية fast-forward - أي مجرد تحريك المؤشر إلى الأمام. عندما يحتوي كلا الفرعين على commits جديدة، ينشئ Git عملية دمج (merge commit) تربط التاريخين معًا. على عكس rebase، يحافظ merge على التاريخ الدقيق لكلا الفرعين.
جرّب هذه الأوامر في ساحة الطرفية - صدفة حقيقية في متصفحك، لا شيء لتثبيته.
الصياغة
| Command | What it does |
|---|---|
git merge feature | دمج feature في الفرع الحالي |
git merge --no-ff feature | إنشاء merge commit دائمًا |
git merge --ff-only feature | الدمج فقط إذا كان بالإمكان تنفيذ fast-forward |
git merge --squash feature | دمج commits الفرع في commit واحد |
git merge --abort | إلغاء عملية دمج بها تعارضات |
Fast-forward vs merge commit
| Scenario | Fast-forward | Merge commit (--no-ff) |
|---|---|---|
| ينشئ commit جديدًا | لا | نعم |
| يحتفظ بسجل للفرع | لا | نعم |
| يحدث عندما | لم يتباعد الفرع الحالي | يحتوي كلا الفرعين على commits جديدة |
حل تعارض الدمج
عندما يغيّر كلا الفرعين الأسطر نفسها، يتوقف Git مؤقتًا.
| Step | Command | Result |
|---|---|---|
| 1 | حرّر الملفات المتعارضة | اختر الأسطر الصحيحة، وأزل العلامات |
| 2 | git add <file> | وضع علامة على التعارض كمحلول |
| 3 | git commit | إكمال عملية الدمج |
أسئلة شائعة حول git merge
كيف أدمج فرعًا في فرع آخر في Git؟
انتقل إلى الفرع الذي تريد الدمج فيه (مثل
git switch main)، ثم نفّذ git merge feature. يدمج Git الـ commits من feature في main، إما عبر fast-forward أو بإنشاء merge commit إذا كان كلا الفرعين قد تباعدا.ما الفرق بين fast-forward وmerge commit؟
يحدث fast-forward عندما لا يكون فرعك الحالي قد تحرك منذ أن تفرّع الفرع الآخر - يكتفي Git بتحريك المؤشر إلى الأمام دون إنشاء commit جديد. أما merge commit فيُنشأ عندما يحتوي كلا الفرعين على commits جديدة، فيربط تاريخيهما معًا. استخدم
--no-ff لإنشاء merge commit دائمًا، أو --ff-only لاشتراط fast-forward.كيف أحل تعارض الدمج؟
عندما يحدث تعارض في الدمج، يضع Git علامات على الأقسام المتعارضة في الملفات المتأثرة باستخدام العلامات
<<<<<<< و======= و>>>>>>>. حرّر كل ملف للإبقاء على المحتوى الصحيح وإزالة العلامات، ثم نفّذ git add على الملفات المحلولة وgit commit لإنهاء الدمج.كيف أتراجع عن عملية دمج أو ألغيها؟
إذا كانت عملية الدمج لا تزال جارية (تعارضات غير محلولة)، نفّذ
git merge --abort لإلغائها واستعادة الحالة السابقة للدمج. إذا اكتمل الدمج محليًا بالفعل، فإن git reset --hard ORIG_HEAD يعيد الفرع إلى موضعه قبل الدمج (وعلى عكس HEAD~1، يعمل بشكل صحيح أيضًا بعد fast-forward - لكنه يتجاهل العمل غير المودَع). أما إذا كان الدمج قد دُفع، فاستخدم git revert -m 1 <merge-hash>.هل يمكنني التدرب على هذا عبر الإنترنت؟
نعم. افتح ساحة الطرفية لتشغيل
git merge في صدفة حقيقية داخل متصفحك - لا شيء لتثبيته. كما يغطي مساق Git التفاعلي المجاني من Coddy الدمج وحل التعارضات خطوة بخطوة.