Merge Request (MR) — درخواست ادغام تغییرات از یک شاخه Git به شاخه دیگر، عنصر مرکزی بازبینی کد در GitLab و GitHub. به گزارش GitLab Docs, 2024، Merge Request (MR) فقط از نظر اصطلاحات با Pull Request (PR) در GitHub تفاوت دارد: در GitLab این MR است، در GitHub — PR، اما ماهیت و فرآیند یکسان است. هر MR شامل توضیحات تغییرات، لیست commitها، فایلهای diff و بحث با تیم است.
نکات اصلی
Merge Request (MR) — درخواست ادغام تغییرات از یک شاخه Git به شاخه دیگر که فرآیند بازبینی کد و بررسی خودکار را آغاز میکند. برخلاف ادغام مستقیم از طریق کنسول، MR یک رویه رسمی ایجاد میکند: توسعهدهنده تغییرات را توصیف میکند، بازبینها را تعیین میکند، CI/CD را راهاندازی میکند و قبل از اعمال تغییرات بازخورد دریافت میکند. این عنصر کلیدی GitLab است، اما مکانیزم مشابه در GitHub Pull Request (PR) نامیده میشود.
به گزارش GitLab Documentation, 2026، در GitLab سالانه بیش از 80 میلیون Merge Request ایجاد میشود. هر MR شامل چهار مؤلفه اصلی است: توضیحات (description) با زمینه تغییرات، لیست commitها (commits)، تفاوت کد (diff) و بحث (discussion thread). بدون یکی از این عناصر، MR ناقص محسوب میشود.
Merge Request (MR) سه وظیفه را حل میکند: از تغییرات مستقیم در شاخههای محافظتشده (main, develop) جلوگیری میکند، کنترل کیفیت را از طریق بازبینی تضمین میکند و تاریخچه بحثها را برای توسعهدهندگان آینده حفظ میکند. در GitLab وضعیت MR در رابط با نشانههای رنگی نمایش داده میشود: خاکستری برای Draft، نارنجی برای در انتظار، سبز برای Approved، بنفش برای Merged و قرمز برای Closed.
در پلتفرمهای مختلف Git، Merge Request به طور متفاوت نامیده میشود. GitLab از «Merge Request» (MR)، GitHub از «Pull Request» (PR) استفاده میکند. مشابه — Change Request (CR) در Gerrit. هر سه به یک فرآیند اشاره دارند: درخواست ادغام تغییرات از طریق بازبینی کد. انتخاب اصطلاح فقط به پلتفرم مورد استفاده در پروژه بستگی دارد.
# ایجاد شاخه با تغییرات
git checkout -b feature/add-auth
git commit -m "Add OAuth2 authentication flow"
git push origin feature/add-auth
# MR را میتوان از طریق UI GitLab/GitHub یا CLI ایجاد کرد:
gh pr create --title "Add OAuth2 authentication flow" \
--body "Implements OAuth2 with Google and Apple providers" \
--reviewer "team-lead"
Merge Request در GitLab و Pull Request در GitHub — مکانیزمهایی با عملکرد یکسان و نامهای متفاوت هستند. تفاوت به تاریخچه برمیگردد: GitLab در ابتدا به عنوان جایگزین Self-Hosted برای GitHub positioning شد و اصطلاح «merge request» را برای فرآیند ادغام انتخاب کرد. GitHub که زودتر راهاندازی شده بود، از «pull request» — درخواست «کشیدن» (pull) تغییرات به شاخه اصلی استفاده کرد.
به گزارش GitHub Docs, 2024، هر دو ابزار از مجموعه یکسانی از قابلیتها پشتیبانی میکنند: توضیحات با Markdown، تعیین بازبینها، نظر دادن روی خطوط خاص کد، وضعیتهای بررسی و ادغام خودکار در صورت برآورده شدن شرایط. تفاوتها به رابط و قابلیتهای اضافی مربوط میشود.
| پارامتر | GitLab (Merge Request) | GitHub (Pull Request) |
|---|---|---|
| اصطلاح | Merge Request (MR) | Pull Request (PR) |
| پیشنویس | Draft MR | Draft PR |
| Code Owners | Code Owners + Approvals | CODEOWNERS + Review |
| روشهای ادغام | Merge Commit, Squash, Fast-Forward | Merge Commit, Squash, Rebase |
| ادغام CI | GitLab CI/CD داخلی | GitHub Actions |
ایجاد Merge Request (MR) با انتشار شاخه حاوی تغییرات در مخزن راه دور آغاز میشود. پس از push به GitLab یا GitHub، دکمه «Create Merge Request» یا «Compare & Pull Request» در رابط ظاهر میشود. توسعهدهنده توضیحات را پر میکند، شاخه هدف (معمولاً develop یا main) را مشخص میکند، بازبینها را تعیین کرده و برچسبها (labels) را اضافه میکند.
به گزارش GitLab Documentation, 2025، یک MR استاندارد شامل عنوان تا 72 کاراکتر، توضیحات با الگو (template) و پیوند به وظیفه (issue) است. توضیحات باید به سؤالات پاسخ دهد: چه کاری انجام شده، چرا، چگونه تست شده است. GitLab از بستن خودکار issue در هنگام ادغام از طریق کلمات کلیدی Closes, Fixes, Resolves پشتیبانی میکند.
# نمونه الگوی .gitlab/merge_request_templates/default.md
## What does this MR do?
[توضیح مختصر تغییرات: چه و چرا]
## How to test
1. اجرای ./gradlew test
2. بررسی LoginActivity با توکن تستی
3. اطمینان از عدم وجود regression در AuthManager
## Related issues
Closes #142
Merge Request (MR) پنج وضعیت را در GitLab طی میکند. اولین — Draft (پیشنویس)، با پیشوند «Draft:» در عنوان مشخص میشود و ادغام را مسدود میکند. پس از آماده شدن، توسعهدهنده Draft را حذف میکند و MR به وضعیت Opened میرود — بازبینی کد آغاز شده و pipeline CI/CD راهاندازی میشود.
به گزارش GitLab Docs, 2024، در وضعیت Opened بازبینها diff را بررسی میکنند، نظر میدهند و از طریق Resolve Threads تغییرات درخواست میکنند. وقتی همه موضوعات بسته شدند و CI/CD با موفقیت گذشت، توسعهدهنده مسئول Approve را قرار میدهد. پس از آن MR را میتوان با دکمه Merge ادغام کرد یا منتظر ادغام خودکار (Auto-merge) شد.
GitLab از سه variant وضعیت نهایی پشتیبانی میکند: Merged (با موفقیت ادغام شده)، Closed (بدون ادغام بسته شده، مثلاً در صورت انصراف از ویژگی) و Reopened (بازگشایی مجدد پس از بسته شدن). هر وضعیت در Activity Timeline MR برای ممیزی ثبت میشود.
GitLab هنگام وقوع رویدادها وضعیت Merge Request را به طور خودکار بهروزرسانی میکند: با push commitهای جدید، Approvals بازنشانی میشوند، با CI pipeline موفق وضعیت Pipeline passed میشود، با خطا — Pipeline failed (ادغام مسدود میشود). میتوان Auto-merge را پیکربندی کرد: MR پس از CI موفق و دریافت همه تأییدهای مورد نیاز به طور خودکار ادغام میشود.
بازبینی کد در Merge Request (MR) — مرحله اجباری در اکثر پروژههای تجاری. به گزارش تحقیق SmartBear, 2023، بازبینی کد با MR تعداد نقصها را 30–60% کاهش میدهد و آموزش توسعهدهندگان جدید را تسریع میکند. قانون اصلی — هر MR حداقل توسط یک، و بهتر دو توسعهدهنده که در نوشتن کد شرکت نداشتهاند بررسی میشود.
بررسی MR شامل پنج معیار است: صحت منطق، تطابق با سبک کد، پوشش تست، امنیت و عملکرد. در GitLab میتوان Required Approvals — تعداد تأییدهای اجباری قبل از ادغام را پیکربندی کرد، مثلاً 2 تأیید برای main و 1 برای develop.
بحث در MR در Threads — نظرات روی خطوط خاص کد انجام میشود. هر موضوع باید قبل از ادغام resolved (بسته) شود. برای تسریع بازبینی، توصیه میشود اندازه MR را محدود کنید: 200–400 خط تغییر. طبق دادههای Google Research (2022)، MRهای بزرگتر از 400 خط با 30% کارایی کمتر بررسی میشوند.
هنگام ایجاد Merge Request (MR)، pipeline CI/CD به طور خودکار راهاندازی میشود. در GitLab این کار از طریق فایل .gitlab-ci.yml، در GitHub — از طریق GitHub Actions workflow انجام میشود. Pipeline شامل ساخت پروژه (build)، اجرای تستهای واحد (unit tests)، linterها (lint)، تحلیل ایستا (SAST) و بررسی پوشش کد است.
به گزارش GitLab Blog, 2024، وضعیت pipeline مستقیماً در MR نمایش داده میشود: علامت سبز (passed)، ضربدر قرمز (failed) یا دایره زرد (running). اگر pipeline شکست بخورد، GitLab دکمه Merge را تا رفع مشکل مسدود میکند. در تنظیمات میتوان «Merge when pipeline succeeds» — ادغام خودکار پس از pipeline موفق را فعال کرد.
# .gitlab-ci.yml — نمونه برای پروژه Android
test:
stage: test
script:
- ./gradlew ktlintCheck
- ./gradlew testDebugUnitTest
only:
- merge_requests
build:
stage: build
script:
- ./gradlew assembleDebug
only:
- merge_requests
GitLab و GitHub سه روش ادغام برای Merge Request ارائه میدهند. انتخاب بستگی به سیاست تیم و خلوص تاریخ مورد نیاز دارد. Merge Commit — یک commit ادغام جداگانه ایجاد میکند و تمام تاریخ شاخه ویژگی را حفظ میکند. Squash — تمام commitهای شاخه را در یک commit در شاخه هدف ادغام میکند. Fast-Forward — commitها را بدون commit ادغام به صورت خطی اعمال میکند.
به گزارش GitLab Docs, 2025، Squash در پروژههای با تراکم بالای commit (20+ commit در یک شاخه ویژگی) ترجیح داده میشود. Fast-Forward برای Trunk-Based Development اجباری است. Merge Commit در Git Flow برای حفظ معناشناسی شاخهبندی استفاده میشود.
Merge Request (MR) با کیفیت زمان بازبینی را کاهش میدهد و تعداد خطاها را کم میکند. قانون اول — یک MR یک وظیفه را حل میکند. اگر تغییرات به چندین ویژگی نامرتبط مربوط میشود، باید به MRهای جداگانه تقسیم شوند. دوم — عنوان MR باید informative باشد: «Add OAuth2 authentication with Google provider» به جای «Fix stuff» یا «Update code».
به گزارش Google Engineering Practices, 2024، یک MR خوب شامل توضیحات زمینه است: چرا تغییرات ضروری هستند، چگونه تست شدهاند، چه ریسکهایی وجود دارد. اندازه MR نباید از 400 خط تغییر تجاوز کند. اگر حجم بیشتر است — وظیفه باید به زیروظایف تقسیم شود. برای مستندات و تستها استثناها مجاز هستند، اما با توضیح.
Merge Request (MR) باید شامل تستهای خودکار برای قابلیت جدید باشد. در GitLab میتوان سیاست Coverage Check را پیکربندی کرد — اگر پوشش کد زیر آستانه (مثلاً 80%) بیفتد، MR به طور خودکار مسدود میشود. این تضمین میکند که قابلیت جدید کیفیت کلی پروژه را کاهش نمیدهد.
GitLab از الگوهای Merge Request از طریق فایلهای .gitlab/merge_request_templates/ پشتیبانی میکند. الگو شامل بخشهایی است: چه کاری انجام شده، چگونه تست کنیم، وظایف مرتبط و چکلیست. استفاده از الگوها ایجاد MR را تسریع میکند و تضمین میکند که توسعهدهندگان اطلاعات مهم را فراموش نمیکنند. در توضیحات MR حتماً issue مرتبط (Closes #N) برای بستن خودکار وظایف در هنگام ادغام ذکر میشود.
سؤالات متداول
Merge Request (MR) — درخواست توسعهدهنده برای ادغام تغییراتش در شاخه اصلی پروژه است. سایر اعضای تیم کد را بررسی میکنند، نظر میدهند و فقط پس از تأیید تغییرات وارد پروژه میشوند. این مشابه Pull Request در GitHub است.
Merge Request — اصطلاح GitLab، Pull Request — اصطلاح GitHub. از نظر عملکردی مکانیزمها یکسان هستند: درخواست ادغام، بازبینی کد، نظرات روی خطوط کد، بررسیهای CI/CD. تفاوت فقط در نام دکمه و برخی عناصر رابط است.
پس از push تغییرات به مخزن راه دور، برگه Merge Requests → Create Merge Request را باز کنید. شاخه مبدأ (source)، شاخه هدف (target) را انتخاب کنید، توضیحات را پر کنید (میتوانید از الگو استفاده کنید)، بازبین تعیین کرده و Create را کلیک کنید. GitLab به طور خودکار diff تغییرات را نشان میدهد.
بهینه 1–2 بازبین برای هر MR. طبق دادههای Google Research، تعداد بیشتر بازبین کیفیت بررسی را افزایش نمیدهد اما زمان انتظار را طولانی میکند. برای شاخه main اغلب 2 تأیید اجباری و برای develop 1 تأیید پیکربندی میشود.
اندازه ایدهآل MR — 200–400 خط تغییر شامل یا 1–3 commit. طبق دادههای SmartBear و Google، MR بزرگتر از 400 خط با 30% کارایی کمتر بررسی میشود. تغییرات بزرگ را به چند MR متوالی تقسیم کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید