В чем разница между Pull Request и Merge Request?

«В чем разница между Pull Request и Merge Request?» — вопрос из категории Git, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Pull Request (PR) и Merge Request (MR) — это концептуально одно и то же: механизм для обсуждения, ревью и интеграции изменений из одной ветки Git в другую. Основное различие — в терминологии, принятой на разных платформах.

  • Pull Request (PR) — это термин, используемый в GitHub и Bitbucket. Идея в том, что вы "предлагаете" (request) целевой ветке "затянуть" (pull) ваши изменения.
  • Merge Request (MR) — это эквивалентный термин в GitLab. Акцент сделан на результате операции — слиянии (merge).

С точки зрения DevOps-практик функциональность идентична:

  1. Ветвление (feature branch).
  2. Запрос на слияние с основной веткой (main/master).
  3. Проверки (CI pipelines).
  4. Ревью кода коллегами.
  5. Утверждение (approval) и последующее слияние.

Небольшие нюансы могут быть в реализации:

  • В GitLab настройки правил для MR (требования к аппрувам, squash merge) часто более глубоко интегрированы в конвейер.
  • GitHub Actions и GitLab CI/CD предоставляют разный синтаксис для триггеров на события PR/MR.

Пример workflow для DevOps-конвейера:

# .gitlab-ci.yml (для Merge Request)
deploy_to_review:
  stage: deploy
  script:
    - echo "Deploying branch $CI_COMMIT_REF_NAME to review environment"
    - ./deploy.sh review
  only:
    - merge_requests  # Запуск только для MR

# Аналогичный триггер в GitHub Actions будет использовать `pull_request`.

Для инженера разница минимальна: процесс ревью и слияния кода универсален, а название зависит от выбранной платформы хостинга Git.