لعمل cherry-pick للإيداعات المترابطة على نظام macOS، حدد أولاً الإيداع الأساسي (المتطلب السابق) وطبقه قبل الإيداع الذي يعتمد عليه. في تطبيق Terminal، افحص سجل الفرع المصدر، وتأكد من أن شجرة العمل في الفرع الهدف نظيفة، ثم نفذ cherry-pick لمعرّفات الإيداعات المحددة وفق ترتيب التبعية. يطبق Git تغيير كل إيداع وينشئ إيداعاً جديداً على الفرع الذي قمت بالتبديل إليه حالياً؛ وهو لا يحدد تلقائياً التغييرات التي يحتاجها الفرع الهدف. توثيق أمر cherry-pick في Git
ما الترتيب الذي ينبغي استخدامه للإيداعات المترابطة؟
طبق الإيداع الأساسي (المتطلب السابق) قبل التغيير المعتمد عليه. على سبيل المثال، إذا كان الإيداع a1b2c3 يضيف دالة والإيداع d4e5f6 يستدعي تلك الدالة، فاختر a1b2c3 أولاً ثم d4e5f6 ثانياً. إذا كان الإيداع الثاني يتوقع وجود ملف أو واجهة أو سلوك تم تقديمه في الإيداع الأول، فإن عكس ترتيبهما قد يتسبب في حدوث تعارضات أو يترك الفرع الهدف في حالة وسيطة معطوبة.
استخدم ترتيب الإيداعات من الأصل إلى الفرع (parent-to-child) في الفرع المصدر كنقطة انطلاق. توصي إرشادات سير العمل في Git بتقسيم العمل إلى إيداعات منطقية متسقة ويمكن أن تعمل بشكل مستقل؛ لكن السجلات الفعلية قد لا تحقق هذا النموذج المثالي، لذا افحص ما يغيره كل إيداع محدد وما يعتمد عليه. يقوم Cherry-picking بنسخ تغييرات الإيداعات بشكل فردي، بينما يجلب الدمج (merging) التغييرات على مستوى الفرع ككل. إذا كنت بحاجة إلى الفرع بأكمله وسجله، ففكر فيما إذا كان الدمج أنسب من اختيار الإيداعات واحداً تلو الآخر. توثيق مهام سير العمل في Git
فحص السجل في تطبيق Terminal
افتح تطبيق Terminal على جهاز Mac، وانتقل إلى مجلد المستودع، وتحقق من حالتك الحالية. استبدل المسار الموضوع بين علامتي اقتباس بالمسار الفعلي لمستودعك؛ حيث تتيح علامات الاقتباس وجود مسافات في أسماء المجلدات.
cd "/path/to/your/repository"
git status --short --branch
git log --graph --oneline --decorate --all
يقوم الأمر الأول بتغيير دليل العمل في Terminal. يوضح الأمر git status الفرع الحالي وأي تغييرات محلية. يساعدك العرض التخطيطي (graph view) على معرفة الإيداعات الموجودة في الفرع المصدر وترتيبها. يستخدم Terminal في macOS غلاف zsh افتراضياً، وتستخدم الأوامر أعلاه صيغة الأوامر العادية المدعومة هناك. دليل تطبيق Terminal من Apple
إذا كان الفرع المطلوب هو فرع تتبع بعيد (remote tracking branch) ولم تكن أحدث حالته متوفرة محلياً، فقم بجلب البيانات قبل فحصه:
git fetch origin
git log --reverse --oneline origin/feature-name
استبدل origin/feature-name باسم الفرع البعيد الفعلي. يعرض الخيار reverse الإيداعات بترتيب من الأقدم إلى الأحدث. بالنسبة للسجلات الكبيرة، قم بتضييق نطاق السجل إلى الإيداعات التي تلي قاعدة مشتركة معروفة، على سبيل المثال git log --reverse --oneline base-commit..origin/feature-name. اقرأ عناوين الإيداعات الناتجة، ثم افحص التغييرات المرشحة باستخدام git show COMMIT_ID. يُعد تحديد نطاق الإيداعات أمراً ملائماً للمراجعة، ولكن لا تفترض أن تمرير النطاق بحد ذاته يضمن ترتيب التبعية المخصص الذي تحتاجه: تحديد معرّفات الإيداعات الصريحة يجعل التسلسل المقصود واضحاً.
تنفيذ Cherry-pick بترتيب المتطلبات السابقة
قبل البدء، قم بحفظ التغييرات المحلية في إيداع أو تنحيتها جانباً بأمان بأي طريقة أخرى. تتطلب عملية cherry-pick العادية شجرة عمل نظيفة، ويجب عليك التأكد من الفرع الهدف قبل تطبيق أي شيء. استبدل المعرّفات النموذجية بمعرّفات الإيداعات الفعلية الكاملة أو المختصرة، مرتبة من المتطلب السابق إلى المعتمد عليه:
git switch destination-branch
git status --short --branch
git cherry-pick a1b2c3 d4e5f6
ينشئ Git إيداعاً جديداً لكل تغيير محدد بالترتيب المزود. تحقق من المخرجات بعناية: إذا كان التغيير قد تم تضمينه بالفعل عبر مسار آخر، أو إذا كان الفرع الهدف قد تباعد، فقد يبلغ Git عن تغيير فارغ أو يتوقف بسبب تعارض. بعد ذلك، افحص السجل الناتج وشجرة العمل باستخدام git log --oneline -n 5 وgit status. قم بتشغيل الاختبارات والفحوصات ذات الصلة بالمشروع قبل الاعتماد على النتيجة؛ فنجاح عملية cherry-pick دون أخطاء يعني فقط أن Git طبق التغييرات، وليس أن الميزة تعمل بالشكل المنشود.
في حالة حدوث تعارض في الإيداع
عند حدوث تعارض أثناء عملية cherry-pick، يتوقف Git مؤقتاً عند ذلك الإيداع. افحص الملفات المتأثرة وقم بحل كل تعارض من خلال دمج التغيير المصدر المقصود مع المحتويات الحالية للفرع الهدف. قم بتجهيز الملفات التي تم حل تعارضاتها باستخدام git add ومتابعة التسلسل:
git add "path/to/resolved-file"
git cherry-pick --continue
استخدم git cherry-pick --abort لإلغاء التسلسل الحالي والعودة إلى الحالة التي كانت عليها قبل بدئه. لا تستخدم git cherry-pick --skip إلا إذا قررت أنه يجب حذف تغيير الإيداع الحالي وتجاهله؛ فقد تعتمد الإيداعات اللاحقة عليه، وبالتالي قد يؤدي التخطي إلى فشل تلك التغييرات اللاحقة أو فقدانها لمعناها. يوثق Git أوامر continue وskip وabort كأدوات تحكم للعمليات قيد التنفيذ. خيارات منظم cherry-pick في Git
بالنسبة لإيداع الدمج (merge commit)، تريث قبل اختياره: يتطلب Git تحديد فرع أصل رئيسي (mainline parent) لأن الدمج يحتوي على أكثر من أصل واحد. وبالمثل، إذا كانت الإيداعات اللاحقة لا يمكن فهمها بدون سلسلة طويلة من التغييرات السابقة، فإن اختيار القليل منها فقط قد لا يؤدي إلى نتيجة متماسكة. افحص التبعيات واختر أصغر تسلسل كامل يحافظ عليها.