انتقل إلى المحتوى

Pull requests

الـ pull request طلبٌ بدمج تغييرات branch في branch آخر، مع وصف يشرح ما غيّرته ولماذا، ومساحة يراجع فيها الآخرون كودك سطرًا سطرًا قبل الدمج. تحتاجه كلّما ساهمت في مشروع لا تملك حق الـ push إليه، أو أردت مراجعة عمل فريقك قبل أن يصل إلى main. وتشرح هذه الصفحة فتحه ومراجعته وطرق الـ merge المتاحة في ليڤانت غيت (LevantGit).

ملاحظة

إن كانت هذه أول مرة تفتح فيها pull request، ابدأ بصفحة الـ branches والـ pull requests. هذه الصفحة مرجع أوسع للخيارات.

إنشاء pull request

  1. أنشئ fork إن لم تكن تملك صلاحية push إلى الـ repository مباشرة. الـ fork نسخة في حسابك تستطيع التعديل عليها بحرّية. إن كنت collaborator في الـ repository فتجاوز هذه الخطوة.
  2. أنشئ branch باسم يصف العمل، مثل fix-login-error.
  3. عدّل وأنشئ commit ونفّذ push إلى branchك:

    git switch -c fix-login-error
    git add .
    git commit -m "أصلح خطأ تسجيل الدخول"
    git push -u origin fix-login-error
    
  4. افتح الـ pull request: اذهب إلى الـ repository الأصلي، تبويب Pull Requests، ثم New Pull Request. اختر الـ branch الهدف (غالبًا main) والـ branch المصدر (branchك)، واكتب عنوانًا واضحًا ووصفًا يشرح لماذا هذا التغيير، ثم اضغط Create Pull Request.

نصيحة

اكتب في الوصف closes #12 إن كان الطلب يحلّ الـ issue رقم 12؛ تُغلق الـ issue تلقائيًا عند الـ merge. التفاصيل في الإشارات المرتبطة تلقائيًا.

الـ pull requests «قيد العمل» (WIP)

تريد أن يرى الفريق عملك مبكرًا دون أن يدمجه أحد بالخطأ؟ اجعله draft pull request بأن تبدأ عنوانه بـ WIP: أو [WIP] (حالة الأحرف لا تهمّ). يُعطَّل زر الـ merge ما دام العنوان يحمل هذه البادئة.

ستجد أيضًا في الشريط الجانبي رابط Still in progress? يضيف البادئة بضغطة واحدة، وحين تنتهي اضغط الرابط المقابل لإزالتها فيصبح الطلب جاهزًا للـ review.

الـ review والـ approve

حين تفتح الـ pull request يُخطَر المشرفون ومن اخترتهم في حقل Reviewers. يفتح الـ reviewer تبويب Files Changed، ويعلّق على أيّ سطر، ثم يختار واحدًا من ثلاثة:

  • Comment: ملاحظات عامة بلا حكم.
  • Approve: التغييرات جاهزة للـ merge.
  • Request Changes: شيء يجب تغييره قبل الـ merge.

إن طُلبت منك تعديلات، عدّل على جهازك وأنشئ commit ونفّذ push إلى الـ branch نفسه؛ يتحدّث الـ pull request تلقائيًا وتبقى المحادثة كلها في تبويب Conversation.

هل يكفي approve واحد؟ هذا يقرّره owner الـ repository: في Protected branches يستطيع اشتراط عدد معيّن من الـ approvals، وإلغاء الـ approvals القديمة عند push لـ commits جديدة، ومنع الـ merge ما دام هناك Request Changes قائم.

طرق الـ merge

حين يُعتمد الطلب يظهر زر الـ merge أسفل الصفحة مع قائمة طرق. يظهر منها ما سمح به owner الـ repository في Settings:

الخيار في الواجهة ماذا يحدث
Create merge commit يحتفظ بكل commits الـ branch ويضيف merge commit فوقها. الافتراضي والأكثر أمانًا.
Rebase then fast-forward يعيد rebase لـ commits الـ branch فوق الـ branch الهدف ثم يقدّمه بـ fast-forward؛ لا merge commit، والـ log خطّي.
Rebase then create merge commit مثل السابق لكن مع merge commit في النهاية.
Create squash commit يضمّ الـ commits كلها في commit واحدة نظيفة على الـ branch الهدف. مناسب حين يحوي الـ branch commits كثيرة صغيرة.
Fast-forward only يدمج فقط إن أمكن الـ fast-forward دون merge commit؛ وإلا يُرفض الـ merge حتى تحدّث branchك.
Manually merged لا يدمج شيئًا؛ تخبر ليڤانت غيت أنك نفّذت الـ merge بنفسك في الطرفية وتعطيه SHA الـ merge commit فيُغلق الطلب بوصفه مدموجًا.

يمكنك قبل الضغط تعديل رسالة الـ commit التي سيحملها الـ merge (انظر قوالب رسائل الـ merge)، وتفعيل Delete branch after merge لتنظيف الـ branches القديمة.

auto-merge

إن كان الـ repository يشغّل status checks (مثل Actions إن كانت مفعّلة) ولم تكتمل بعد، يظهر بدل زر الـ merge خيار Merge when all checks succeed. اختره وسيُدمج الطلب من تلقاء نفسه حين تنجح الفحوصات، بالطريقة التي اخترتها، دون أن تنتظر أمام الشاشة. إن فشل أحد الفحوصات يُلغى الـ auto-merge ويظهر ذلك في المحادثة.

إغلاق pull request دون merge

إن قرّرت التراجع عن الطلب اضغط Close Pull Request أسفل المحادثة. يبقى الطلب محفوظًا مع نقاشه، وتستطيع إعادة فتحه لاحقًا بزر Reopen.

أسئلة شائعة

ما الفرق بين pull request و git pull؟

الـ pull request طلب مراجعة ودمج تفتحه من واجهة ليڤانت غيت: تقترح فيه دمج branchك في branch آخر، فيقرأه الآخرون ويعلّقون عليه قبل الدمج. أمّا git pull فأمر تكتبه في الطرفية يجلب آخر التغييرات من الخادم إلى نسختك المحلية ويدمجها فيها. الأول تعاون، والثاني تحديث لجهازك.

كيف أفتح pull request على ليڤانت غيت؟

أنشئ branch جديدًا، ونفّذ commit ثم push إليه، ثم افتح الـ repository في المتصفح واختر تبويب Pull Requests ثم New Pull Request. حدّد الـ branch الهدف والـ branch المصدر، واكتب عنوانًا واضحًا ووصفًا يشرح سبب التغيير، ثم اضغط Create Pull Request. إن لم تكن تملك صلاحية push فأنشئ fork أولًا.

ما الفرق بين merge و squash و rebase عند دمج الطلب؟

الـ merge commit يحتفظ بكل commits الـ branch ويضيف فوقها commit للدمج. والـ squash يضمّها كلها في commit واحدة نظيفة على الـ branch الهدف. والـ rebase يعيد بناء الـ commits فوق الـ branch الهدف فيبقى الـ log خطّيًا بلا merge commit. ويحدّد owner الـ repository أيّ هذه الطرق يظهر في زر الـ merge.

كيف أجعل الـ pull request «قيد العمل» فلا يدمجه أحد؟

ابدأ عنوانه بـ WIP: أو [WIP]، أو اضغط رابط Still in progress? في الشريط الجانبي. يبقى زر الـ merge معطّلًا ما دامت البادئة موجودة، فيرى فريقك عملك مبكرًا ويعلّق عليه دون خطر الدمج بالخطأ. أزل البادئة حين يصبح الطلب جاهزًا للـ review.

ماذا بعد؟


هذه الصفحة مبنية على وثائق Gitea (رخصة MIT) بعد ترجمتها وتبسيطها.