Pull request и merge request
Обновлено 31 июля 2026 г.
Pull request - это предложение влить твою ветку в основную, оформленное отдельной страницей с обсуждением. На GitHub его называют pull request, на GitLab - merge request, и разница только в имени.
Команды git тут ни при чём: страница живёт на сайте, а не в репозитории. Нужна она затем, чтобы изменение прочитал кто-то ещё, а тесты прогнались до того, как оно попадёт в ветку, от которой работает вся команда. Заодно остаётся запись: почему код стал таким и кто это одобрил.
Как открыть
- Отведи ветку от свежей основной:
git switch main,git pull,git switch -c fix-login-crash. - Работай и коммить как обычно, коммитов может быть сколько угодно.
- Отправь ветку на сервер.
$ 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'.- Открой страницу репозитория в браузере. GitHub сам покажет плашку Compare & pull request для только что отправленной ветки.
- Проверь пару веток: base - куда вливаем, обычно
main; compare - что вливаем, твоя ветка. - Напиши заголовок и описание: что изменилось и зачем. Нажми 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 и проверка шагов.