انتقل إلى محتوى الدرس
الدرس 31
دورة Version Control

طلبات السحب Pull Requests ومراجعة الكود على GitHubGitHub Pull Requests and Code Review

افتح طلبات سحب Pull Requests احترافية على GitHub، واربطها بتذاكر Issues، وتفاعل مع ملاحظات مراجعة الكود، واختر استراتيجية الدمج المناسبة.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يمثل طلب السحب Pull Request (PR) على منصة GitHub — ويُسمى Merge Request في GitLab — مقترحاً رسمياً منظماً يطلب من مشرفي المشروع مراجعة ودمج الالتزامات الموجودة في فرع المقارنة compare branch مثل feat-payment داخل فرع الأساس الهدف base branch وغالباً ما يكون main.

ولا يقتصر طلب السحب على مجرد دمج تقني، بل يوفر مساحة نقاش مخصصة، وعارض فروق سطري في تبويب Files changed، وفحوصات آلية، وسجلاً توثيقياً يشرح سبب التعديل وسياقه.

مخطط يوضح دورة حياة طلب السحب بدءاً من مقارنة الفروع وربط التذاكر مروراً بمراجعة الكود وصولاً لاستراتيجيات الدمج
Shell
git switch -c feat-payment
git add src/checkout.js
git commit -m "feat: integrate Stripe checkout session"
git push -u origin feat-payment
# GitHub prints a direct URL to open the Pull Request

إذا أردت الحصول على رأي مبكر من فريقك حول التصميم المعماري أو تشغيل اختبارات السحابة قبل اكتمال الكود، يمكنك فتح مسودة طلب سحب Draft Pull Request؛ وهي مسودة تمنع الدمج بالخطأ إلى أن تنقر على زر الجاهزية للمراجعة Ready for review.

وفي وصف طلب السحب، لخّص دائماً التغييرات واربط الطلب بتذكرة العمل Issue ذات الصلة باستخدام الكلمات المفتاحية مثل Closes #42 أو Fixes #42 أو Resolves #42؛ فبمجرد دمج الطلب في الفرع الافتراضي، يغلق GitHub التذكرة رقم 42 تلقائياً ويربطها بالسجل.

Shell
# You can also include closing keywords in commits or PR body:
git commit -m "fix: prevent double form submit (Fixes #42)"
git push

بمجرد جاهزية طلب السحب، يفحص أعضاء الفريق الفروق البرمجية ويتركون تعليقات مباشرة على أسطر محددة من الكود، ثم يرسلون مراجعة رسمية بإحدى حالات ثلاث: تعليق عام Comment، أو موافقة Approve، أو طلب تعديلات Request changes يوقف الدمج حتى معالجة الملاحظات.

وبالتوازي مع المراجعة البشرية، تعمل فحوصات التكامل المستمر الآلية CI Checks مثل GitHub Actions لتشغيل اختبارات الوحدات وفحص جودة الكود والتأكد من عدم كسر البناء.

Shell
# Always verify clean status and diff before requesting review:
git status -sb
git diff origin/main...HEAD --stat

يتساءل المبتدئون كثيراً عن كيفية تعديل طلب السحب بعد أن يطلب المراجع إجراء تغييرات. لا تغلق طلب السحب وتفتح طلباً جديداً أبداً! فلأن طلب السحب يراقب الفرع نفسه ولا يقتصر على لقطة جامدة، يكفي أن تعدّل الملفات محلياً على نفس الفرع، وتسجل التزاماً جديداً، وتنفّذ git push.

يلتقط GitHub الالتزام المرفوع فوراً ويضيفه إلى التسلسل الزمني لطلب السحب المفتوح مع الحفاظ على جميع النقاشات السابقة وإعادة تشغيل فحوصات CI تلقائياً.

Shell
# On the same PR branch (feat-payment):
git add src/checkout.js
git commit -m "refactor: extract currency formatter per review"
git push

عند اكتمال الموافقات واجتياز فحوصات CI باللون الأخضر، يوفر زر الدمج في GitHub ثلاث استراتيجيات:

  • إنشاء التزام دمج Create a merge commit: يحتفظ بجميع الالتزامات التفصيلية لفرع الميزة ويربطها بالفرع main عبر عقدة دمج صريحة --no-ff.
  • الضغط والدمج Squash and merge: يجمع كل التزامات طلب السحب في التزام واحد فقط يوضع على main، مما يبقي سجل المشروع الرئيسي نظيفاً للغاية حتى لو تضمن فرعك عشرين التزاماً تجريبياً صغيراً.
  • إعادة الأساس والدمج Rebase and merge: يعيد تطبيق التزامات الفرع واحداً تلو الآخر خطياً فوق قمة main دون عقدة دمج.
Shell
# After clicking Merge & Delete Branch on GitHub:
git switch main
git pull --prune
git branch -d feat-payment
git log --oneline -n 3

يقارن الجدول التالي بين استراتيجيات دمج طلبات السحب الثلاث في GitHub لاختيار السياسة الأنسب لفريقك:

استراتيجية الدمجالأثر على سجل الالتزاماتهل تنشئ عقدة دمج؟الحالة الأنسب للاستخدام
Create a merge commitتحتفظ بكل التزامات الفرع وتضيف عقدة دمجنعم --no-ffعند الرغبة في توثيق حدود كل فرع ميزة تاريخياً
Squash and mergeتضغط كل التزامات الطلب في التزام واحد على mainلا — التزام خطي واحدعند الرغبة في التزام واحد نظيف لكل ميزة أو طلب سحب
Rebase and mergeتعيد صف التزامات الطلب خطياً فوق قمة mainلا — عدة التزامات خطيةعندما تكون كل التزامات الفرع مرتبة وذرية مسبقاً
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

يقترح طلب السحب Pull Request دمج فرع المقارنة compare في فرع الأساس base بعد اجتياز مراجعة الكود وفحوصات CI. استخدم Closes #ID لإغلاق التذاكر تلقائياً، وادفع التزامات جديدة لتحديث الطلب المفتوح، واختر استراتيجية الدمج المناسبة.

الخطوة التالية والدرس القادم

انتقل إلى الدرس التالي لتعلّم وسوم الإصدارات git tag وإطلاقات GitHub Releases git-tag-and-github-releases لتوثيق إصدارات مشروعك رسمياً.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Pull Requests طلبات السحب PRs
افتح طلبات سحب Pull Requests احترافية على GitHub، واربطها بتذاكر Issues، وتفاعل مع ملاحظات مراجعة الكود، واختر استراتيجية الدمج المناسبة.
للمراجعة
02 Anatomy of a Pull Request مفهوم ومكونات طلب السحب
المفهوم الأساسي لدرس طلبات السحب Pull Requests ومراجعة الكود على GitHub في سير عمل Git وGitHub.
للمراجعة
03 Draft PRs and Issue Keywords المسودات وربط التذاكر تلقائياً
التطبيق العملي المباشر لمفهوم المسودات وربط التذاكر تلقائياً.
للمراجعة
04 Code Review and CI Checks مراجعة الكود وفحوصات البناء
قواعد التحقق وأفضل الممارسات الخاصة بـ مراجعة الكود وفحوصات البناء.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 DVCS DVCS
Distributed Version Control System
معمارية يمتلك فيها كل مطور نسخة محلية كاملة من تاريخ المستودع وكائناته.
للمراجعة
02 SSH SSH
Secure Shell
بروتوكول شبكي مشفر يُستخدم للمصادقة الآمنة ونقل كائنات Git عبر المفاتيح.
للمراجعة
03 PR PR
Pull Request
مقترح على GitHub لمراجعة واختبار ودمج التزامات فرع الميزة داخل الفرع الهدف.
للمراجعة
04 CI CI
Continuous Integration
تشغيل الاختبارات وفحوصات البناء آلياً عند رفع الالتزامات أو فتح طلبات السحب.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أوامر الطرفية المشروحة في مفهوم ومكونات طلب السحب داخل مستودع تجريبي محلي وافحص المخرجات.

  2. بدّل بين الحالات الثلاث في المختبر التفاعلي ضمن قسم المسودات وربط التذاكر تلقائياً وقارن الأوامر والمخرجات.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

في طلب سحب على GitHub يظهر فيه "base: main <- compare: feat-login"، أي فرع سيستقبل الكود المدمج؟

يمثل فرع الأساس base وهو main الوجهة التي تستقبل التعديلات القادمة من فرع المقارنة compare.

02

أي كلمة مفتاحية في وصف طلب السحب تغلق التذكرة رقم 42 تلقائياً فور دمج الطلب؟

تؤدي كتابة Closes #42 أو Fixes #42 أو Resolves #42 إلى إغلاق التذكرة المرتبطة تلقائياً عند الدمج.

03

تسمح مسودة طلب السحب (Draft PR) للفريق بمعاينة الكود وتشغيل فحوصات CI مع منع الدمج بالخطأ حتى تحويلها إلى جاهزة للمراجعة.

صواب؛ فالمسودة تتيح النقاش المبكر وفحص البناء الآلي دون خطر دمج الكود قبل اكتماله.

04

كيف تحدّث طلب سحب مفتوحاً بعد أن يطلب المراجع تعديلاً في الكود؟

تسجل التزاماً جديداً على نفس الفرع محلياً وتنفذ git push فيتحدث طلب السحب المفتوح تلقائياً.

05

أي استراتيجية دمج في GitHub تجمع كافة التزامات طلب السحب في التزام واحد نظيف على الفرع main؟

تضغط استراتيجية Squash and merge جميع التزامات الفرع في التزام واحد يضاف إلى فرع الأساس.

06

تعمل فحوصات التكامل المستمر (CI Checks) تلقائياً لتشغيل الاختبارات وفحص جودة الكود على التزامات طلب السحب قبل دمجه.

صواب؛ إذ تتحقق فحوصات CI آلياً من سلامة الكود المقترح قبل السماح بدمجه في الفرع الرئيسي.

07

بعد دمج طلب السحب وحذف الفرع البعيد على GitHub، ما الأمران المحليان لمزامنة main وتنظيف مراجع التتبع المحذوفة؟

الانتقال إلى main بـ git switch main ثم تنفيذ git pull --prune لتحديث الكود وتنظيف المراجع.

08

تعيد استراتيجية Rebase and merge تطبيق التزامات طلب السحب خطياً فوق قمة main دون إنشاء عقدة التزام دمج.

صواب؛ إذ تحافظ على الالتزامات الفردية مع إبقاء تاريخ الفرع الرئيسي خطياً بالكامل.