Pull request и merge request

Обновлено 31 июля 2026 г.

Pull request - это предложение влить твою ветку в основную, оформленное отдельной страницей с обсуждением. На GitHub его называют pull request, на GitLab - merge request, и разница только в имени.

Команды git тут ни при чём: страница живёт на сайте, а не в репозитории. Нужна она затем, чтобы изменение прочитал кто-то ещё, а тесты прогнались до того, как оно попадёт в ветку, от которой работает вся команда. Заодно остаётся запись: почему код стал таким и кто это одобрил.

Как открыть

  1. Отведи ветку от свежей основной: git switch main, git pull, git switch -c fix-login-crash.
  2. Работай и коммить как обычно, коммитов может быть сколько угодно.
  3. Отправь ветку на сервер.
$ git push -u origin fix-login-crash
To github.com:username/my-project.git
 * [new branch]      fix-login-crash -> fix-login-crash
branch 'fix-login-crash' set up to track 'origin/fix-login-crash'.
  1. Открой страницу репозитория в браузере. GitHub сам покажет плашку Compare & pull request для только что отправленной ветки.
  2. Проверь пару веток: base - куда вливаем, обычно main; compare - что вливаем, твоя ветка.
  3. Напиши заголовок и описание: что изменилось и зачем. Нажми Create pull request.

Что происходит в ревью

Площадка показывает diff между твоей веткой и основной. Коллеги читают его и оставляют замечания, в том числе построчные, привязанные к конкретной строке кода. Рядом автоматика собирает проект и прогоняет тесты, вешая галочку или крестик.

Правки вносятся новыми коммитами в ту же ветку. Pull request обновляется сам, пересоздавать его не нужно:

$ git add login.js
$ git commit -m "Check that user exists before reading email"
$ git push

Замечания в ревью - про код, а не про тебя. «Тут соединение не закроется» - это найденный баг, и находят такое у всех, включая автора замечания.

Чем заканчивается

Когда возражений не осталось и тесты зелёные, кто-то нажимает кнопку слияния. GitHub предлагает три варианта: обычный коммит слияния, squash (все коммиты ветки склеиваются в один) и rebase. Что выбирать, решает команда. Ветку после слияния обычно удаляют прямо на странице, а локальную копию убираешь ты:

$ git switch main
$ git pull
$ git branch -d fix-login-crash
Deleted branch fix-login-crash (was 6d16595).

Бывает и закрытие без слияния: решение оказалось неверным или задача отпала. Коммиты при этом никуда не деваются, ветка остаётся в репозитории.

Частые ошибки

Ветка, отведённая от устаревшего main, приносит конфликты, которых могло не быть. Начинай с git pull на основной ветке.

Огромный pull request на сорок файлов читают по диагонали, и смысл ревью теряется. Дели работу на куски, которые проверяются за один заход.

Где это в учебнике

Глава 7. Как git используют в командах.

Потренироваться руками - в Песочнице: настоящий терминал с git и проверка шагов.