الفروع والجراحة

خيارات الدمج

الدمج العادي زرٌّ واحد، وفي معظم الأحيان تلك هي القصة كلها. هذه الصفحة مخصّصة للأحيان الأخرى: ملف القفل الذي يتعارض في كل دمج، والملف الذي أعاد أحدهم ضبط إزاحته، والمشروع المستورد الذي لا تتطابق مساراته. لدى git مفاتيح للحالات الثلاث منذ سنوات؛ إنها فقط مدفونة في صفحة دليل لا يفتحها أحد وهو في خضمّ تعارض.

انقر بالزر الأيمن على فرع ← دمج مع خيارات… — في صفوف الفروع والمستودعات البعيدة في الشريط الجانبي وكذلك على شارات المراجع الملوّنة في الرسم البياني، فكلاهما يتشارك كتلة القائمة نفسها — أو ⌘K ← دمج مع خيارات.

خيارات الدمج، مع أمر git الدقيق مكتوبًا تحتها

يُطبع الأمر وأنت تبنيه. وهو هناك لكي تقارنه بصفحة الدليل — ولكي تشغّله من طرفية في المرة القادمة، من دون هذه النافذة.

حين تتعارض قطعة

الخيار الراية المعنى
توقّف واسألني — الافتراضي. أنت من يحلّ التعارض
أبقِ جانب هذا الفرع -X ours القطع المتعارضة تُحسم لصالح ما هو مسحوب أصلًا
خذ الجانب الوارد -X theirs القطع المتعارضة تُحسم لصالح الفرع القادم

-X ours ليست -s ours. المفتاح هنا يقرّر فقط في القطع المتعارضة فعلًا؛ أما كل تغيير آخر من الفرع الآخر فيندمج بشكل طبيعي. الاستراتيجية المسمّاة ours — والتي لا يقدّمها Gitcito — تأخذ شجرتك كما هي وترمي الجانب الآخر، فتنتج التزام دمج يدّعي أنه يحتوي عملًا لا يحتويه. هذا التمييز هو أكثر ما يُساء فهمه في دمجات git على الإطلاق.

لا يمكنه أن يقرّر كل شيء. تعارض التعديل/الحذف — أحد الجانبين عدّل ملفًا والآخر حذفه — ليس قطعة محتوى، و-X يتركه لك. وهذا صحيح: لا توجد نسخة من «فضّل جانبنا» تجيب عمّا إذا كان على ملف محذوف أن يعود.

المسافات البيضاء

الخيار الراية
تجاهل التغييرات في المسافات القائمة -X ignore-space-change
تجاهل المسافات البيضاء كليًا -X ignore-space-at-eol، -X ignore-all-space

الحالة التي وُجد هذا لأجلها: فرعٌ أعاد ضبط إزاحة ملف (أو فعل ذلك منسّق شيفرة)، والفرع الآخر عدّل الأسطر نفسها. يرى git تعديلين على سطر واحد فيتوقّف. ومع تجاهل المسافات البيضاء، لم تعد إعادة الإزاحة تغييرًا يُوزن، فيمرّ التعديل الحقيقي.

تحتفظ النتيجة بمسافات الجانب الآخر في الأسطر التي مسّها، لذا فتشغيل منسّق الشيفرة بعدها ليس فكرة سيئة.

ما الذي يُسجَّل

الخيار الراية ما يبقى لديك
تقديم سريع متى أمكن — التزام دمج فقط حين يتشعّب السجل
أنشئ التزام دمج دائمًا --no-ff التزام دمج حتى مع إمكانية التقديم السريع، فيبقى الفرع مرئيًا في الرسم البياني إلى الأبد
تقديم سريع فقط، وإلا فارفض --ff-only لا شيء، إن لزم دمج حقيقي. مفيد كفحص
سحق --squash التغييرات محضَّرة، ولا دمج مسجَّل، والالتزام لك تكتبه
ادمج لكن لا تلتزم --no-commit الدمج محضَّر وقيد التنفيذ، فيمكنك فحصه أو تعديله أولًا

السحق و--no-commit ليسا الشيء نفسه. السحق ينسى أن دمجًا حدث أصلًا: لا يسجّل git أبًا ثانيًا، وسيبدو الفرع غير مدموج في المرة القادمة. أما --no-commit فهو دمج قيد التنفيذ ينتظرك ببساطة — MERGE_HEAD مضبوط، والالتزام يُنهيه بشكل طبيعي.

--ff-only لا يفشل بصمت. إن لزم التزام دمج، يرفض git ولا يتحرّك شيء، وهذا بالضبط ما يجعله فحص سلامة جيدًا قبل دمج مؤتمت.

الاستراتيجية

الاستراتيجية تُستخدم لـ
الافتراضية (ort) كل شيء. دمج git الثلاثي الحديث
subtree الجانبان يقعان في مسارين مختلفين — مشروع مستورد داخل مجلد فرعي من هذا المشروع
resolve الدمج الثلاثي القديم. ينجح أحيانًا حيث يستسلم ort أمام سجل متقاطع

-s subtree هي التي تستحق التذكّر. دمج تحديثات من مشروع يقع في vendor/parser/ كان سيُقرأ لولاها على أنه «حُذف كل ملف، وأُضيف كل ملف»؛ استراتيجية الشجرة الفرعية تحسب إزاحة المسار أولًا. انظر الأشجار الفرعية للتدفّق الكامل.

لماذا يتعارض هذا

داخل حلّال التعارضات يوجد زر لماذا يتعارض هذا. يشغّل git log --merge للملف الذي أمامك ويسرد، لكل جانب، الالتزامات التي مسّته منذ افترق الفرعان.

الالتزامات من كل جانب التي مسّت الملف المتعارض

علامات التعارض تقول ما الذي يتصادم. وهذا يقول من غيّره ومتى ولماذا — وهو عادةً السؤال الذي يحسم الحلّ فعلًا، والسبب الذي يدفعك لتسأل أحدهم قبل أن تختار جانبًا.

إن لم يُظهر شيئًا، فلا أحد من الجانبين التزم بتغيير على هذا الملف بالذات: التصادم آتٍ من إعادة تسمية أو نقل مجلد في مستوى أعلى.

حدود يجدر معرفتها

  • الخيارات تنطبق على دمج واحد. لا تُحفظ، ولا تغيّر مدخل دمج في الحالي العادي ولا قائمة السحب والإفلات.
  • التراجع ما زال يعمل: الدمج المشغَّل بخيارات يسجّل مدخل التراجع نفسه، الذي يعيد الضبط إلى ORIG_HEAD.
  • دمجات الأخطبوط (أكثر من فرعين دفعة واحدة) غير معروضة هنا.
  • مداخل «ادمج X في Y» لكل مرجع في قائمة الالتزام تبقى دمجات عادية. استخدم شارة المرجع نفسها حين تريد الخيارات.
  • -X يقرّر بصمت. لا شيء يشير إلى القطع التي حُلّت تلقائيًا، لذا في دمج مهم، اقرأ الفرق بعدها بدل الوثوق بغياب التعارضات.

انظر أيضًا: الدمج وإعادة الأساس · التعارضات · الأشجار الفرعية · رادار التعارضات

حسّن هذه الترجمة على GitHub