على نظام Mac، يمكنك حل تعارض cherry-pick عن طريق تحرير كل ملف متعارض في Terminal أو في محرر التعليمات البرمجية، وتجهيز الملفات المنتهية باستخدام git add، وتشغيل git cherry-pick --continue. يتوقف Git مؤقتًا لأنه لم يتمكن من تطبيق الإيداع بسلاسة؛ ولم يتلق فرعك الحالي هذا الإيداع بعد. راجع كلا جانبي كل تعارض قبل المتابعة، واستخدم git cherry-pick --abort إذا قررت عدم المتابعة. تصف وثائق cherry-pick الخاصة بـ Git حالة الإيقاف المؤقت هذه وخيارات المتابعة الخاصة بها.

1. افتح Terminal في مجلد المشروع

افتح Terminal من Spotlight أو من مجلد Applications > Utilities في Finder. في Terminal، انتقل إلى مجلد المستودع باستخدام cd مع مساره. بالنسبة لمسار مجلد يحتوي على مسافات، ضع المسار بين علامتي اقتباس، على سبيل المثال cd "/Users/sam/Work/My Project". يمكنك أيضًا كتابة cd متبوعة بمسافة، ثم سحب مجلد المشروع من Finder وإفلاته في نافذة Terminal، ثم الضغط على Return. تصف Apple تطبيق Terminal بأنه واجهة سطر الأوامر في macOS؛ وغالبًا ما ينتهي مؤشر الأوامر الخاص به بـ % عند استخدام غلاف zsh الافتراضي. يوضح دليل Terminal من Apple كيفية فتحه والتعرف على مؤشر الأوامر.

تأكد من أنك داخل المستودع واطلع على ما يبلّغ عنه Git قبل تعديل الملفات:

git status

إذا أظهرت النتيجة أن هناك عملية cherry-pick قيد التنفيذ وذكرت مسارات متعارضة، فتابع الخطوات أدناه. إذا لم تكن متأكدًا من المستودع أو الإيداع المعني، فتوقف وتحقق من هذا السياق قبل حل أي شيء. لا تبدأ عملية cherry-pick ثانية أثناء إيقاف الأولى مؤقتًا.

2. افحص التعارض وحدد ما يجب أن يحتويه الملف

افتح كل ملف نصي متعارض في محرر التعليمات البرمجية الخاص بك. يدرج Git علامات حول الأقسام التي لم يتمكن من التوفيق بينها. يبدو القسم النموذجي هكذا:

<<<<<<< HEAD
content on the current branch
=======
content from the commit being cherry-picked
>>>>>>> commit subject or identifier

HEAD يمثل إصدار الفرع الحالي؛ والقسم الآخر مأخوذ من الإيداع الجاري تطبيقه. تصف هذه التسميات جانبي هذه العملية، لكنها لا تخبرك بأي إصدار هو الصحيح. استعن بالتعليمات البرمجية المحيطة، والتغيير المقصود، والغرض من الإيداع لتحديد ما إذا كنت ستحتفظ بجانب واحد أو تدمج بينهما. توضح وثائق Git أن الملفات المتعارضة تحتوي على علامات وأن المسارات التي تم تطبيقها بسلاسة قد تكون محدثة بالفعل. Git cherry-pick

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

3. جهّز الحلول وراجعها

بعد حل التعارض في ملف ما، أبلغ Git بأنه قد تم حله عن طريق تجهيزه (staging). استخدم المسار الدقيق الموضح بواسطة git status؛ وضع المسارات التي تحتوي على مسافات بين علامتي اقتباس:

git add "Sources/Example File.swift"

كرر ذلك لكل مسار تم حله. يقوم git add بتجهيز المحتويات الحالية للملف، لذا راجع ما تقوم بتجهيزه إذا كان يحتوي على تعديلات غير ذات صلة. يوضح دليل git-add في Git أنه يضيف محتويات الملف إلى الفهرس (index)، وهو منطقة التجهيز (staging area) المستخدمة للإيداع التالي. Git add

تحقق مما إذا كانت هناك أي تعارضات متبقية وافحص التعديلات المجهزة:

git status
git diff --cached

يجب ألا يعرض git status بعد ذلك أي مسارات دون حل. اقرأ الفروق المجهزة (staged diff) وتأكد من وجود التغيير المقصود وغياب علامات التعارض أو التعديلات العرضية. يعرض git diff --cached التغييرات المجهزة؛ توثق Git diff خيار المراجعة هذا. إذا وجدت خطأً، فقم بتحرير الملف، وجهزه مرة أخرى، وراجع الفروق مرة أخرى.

4. متابعة عملية cherry-pick

عند حل جميع التعارضات وتجهيزها، شغّل:

git cherry-pick --continue

يستأنف Git العملية المتوقفة مؤقتًا، وعند النجاح، يسجل التغيير المنتقى (cherry-picked) كإيداع جديد. إذا فتح Git محررًا لكتابة رسالة الإيداع، فاحفظها وأغلق المحرر باستخدام عناصر التحكم المعتادة لذلك المحرر. ثم تحقق من git status وراجع آخر إيداع إذا لزم الأمر:

git status
git log -1 --oneline

في حالة وجود تسلسل من إيداعات cherry-pick، فإن --continue يتابع العملية؛ وقد يتوقف إيداع لاحق أيضًا بسبب تعارضات. قم بحل تعارضات ذلك الإيداع وتجهيزها بنفس الطريقة. توثق مراجع Git خيار --continue لاستئناف عملية cherry-pick فاشلة وخيار --skip لتخطي الإيداع الحالي. استخدم --skip فقط عندما تريد عن قصد استبعاد تغيير ذلك الإيداع، وليس كحل مختصر للملفات التي لم تُحل بعد. خيارات Git cherry-pick

إذا أردت التوقف بدلاً من ذلك

إذا قررت عدم المتابعة في عملية cherry-pick، فشغّل git cherry-pick --abort. توضح وثائق Git أن هذا يلغي العملية ويعيد الحالة إلى ما كانت عليه قبل بدء التسلسل. إذا كان لديك عمل محلي قبل البدء، فتحقق منه بعد ذلك باستخدام git status؛ ولا تستخدم أوامر إعادة الضبط المدمرة (destructive reset commands) كبديل لفهم الحالة الحالية. Git cherry-pick

قاعدة التوقف المفيدة بسيطة: لا تتابع إلا بعد أن تفهم المحتوى المقصود لكل ملف متعارض وتراجع النتيجة المجهزة. إذا كان القصد من التعليمات البرمجية غير واضح، فاحتفظ بالحالة المتوقفة مؤقتًا واطلب إرشادات خاصة بالمشروع قبل إنشاء الإيداع.

المصادر