نقل GitHub ميزة طلبات السحب المتراكمة (stacked pull requests) إلى مرحلة المعاينة العامة، مما يتيح للمطورين تقسيم التغييرات الكبيرة إلى سلسلة من طلبات السحب (PRs) المعتمدة على بعضها البعض، والتي يمكن مراجعتها ودمجها بشكل مستقل.

لماذا تهم هذه الميزة

غالباً ما يتضخم طلب السحب (PR) الواحد الضخم ليتحول إلى عملية مراجعة تستغرق شهراً كاملاً، حيث يضطر المراجعون للغوص في أكواد غير ذات صلة. وعندما يتحرك الفرع الأساسي (base branch)، تصبح هذه التغييرات الضخمة عرضة لتعارضات الدمج (merge conflicts) التي تعيق عمليات الإصدار. تعالج طلبات السحب المتراكمة كلتا المشكلتين من خلال تحويل "diff" واحد كبير إلى سلسلة من الـ "diffs" الأصغر والأكثر تركيزاً، بحيث يبني كل منها على ما سبقه.

كيف تعمل الميزة

قم بإنشاء أول PR مقابل الفرع الرئيسي (main branch)، ثم اجعل الـ PR التالي يعتمد على الأول، والثالث يعتمد على الثاني، وهكذا. يتتبع GitHub هذه العلاقات تلقائياً: إذا قمت بتعديل الـ PR الأساسي، فسيتم تحديث طلبات السحب المعتمدة لتعكس الحالة الجديدة. يمكن للمراجعين الموافقة على المجموعة كاملة بنقرة واحدة أو الموافقة على كل طبقة بشكل فردي.

  • تظل المراجعات ضمن نطاق ضيق، مما يجعل الحصول على الملاحظات أسرع.
  • تقل التعارضات لأن كل PR يمس فقط الأكواد التي تم إدخالها في طبقته الخاصة.
  • تعرض واجهة المستخدم (UI) تسلسل الطبقات، وتوفر أداة GitHub CLI أمراً واحداً (one-liner) لإنشاء سلسلة من طلبات السحب المتراكمة.
gh pr create --title Feature A --base main
gh pr create --title Feature B --base feature-a
gh pr create --title Feature C --base feature-b

ينشئ مثال سطر الأوامر ثلاثة طلبات سحب (PRs) مرتبطة، كل منها يعتمد على ما قبله. يتوفر نفس سير العمل من خلال واجهة الويب، حيث يمكنك إعادة ترتيب طلب سحب أو حذفه من المجموعة دون كسر الطلبات الأخرى.

من المستفيد من هذه الميزة

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

تنبيهات يجب مراعاتها

لا تزال الميزة في مرحلة المعاينة، لذا قد تتغير قبل الإصدار الكامل. ستحتاج الفرق إلى تبني عادات جديدة فيما يتعلق بالتفريع (branching)، وقد تواجه حالات استثنائية عند إعادة التأسيس (rebasing) لمجموعة تم دمجها جزئياً بالفعل. لا تزال الوثائق في طور النمو، لذا قد يقضي المستخدمون الأوائل وقتاً إضافياً في تعلم إشارات واجهة المستخدم.

ما الذي يجب ترقبه لاحقاً

من المرجح أن يطلق GitHub تكاملاً أوثق مع أدوات code-owners والأتمتة، وقد يعرض مقاييس حول تقليل التعارضات. تابع صفحة إعلان المعاينة للحصول على تحديثات بشأن توقيت التوفر العام (GA).

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