linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Совместная работа/pull-request

kb/collab ── Совместная работа ── beginner

Pull Request (PR)

Запрос на влитие ветки в основную с прохождением ревью и CI. На GitHub/GitLab/Bitbucket - стандартный механизм совместной работы. Технически это не команда Git, а функция хостинга, надстроенная над веткой и серией коммитов.

view as markdownaka: pr, merge-request, mr

Pull Request (или Merge Request в GitLab/Bitbucket) - это не часть Git, а удобная обёртка хостинга. Git знает только ветки и коммиты; «запрос на влитие» - это:

  • указание двух веток (source и target);
  • набор коммитов между ними;
  • страница для обсуждения и ревью;
  • привязка к CI-проверкам;
  • кнопка для финального merge.

На разных платформах называется по-разному (GitHub: PR, GitLab: MR, Bitbucket: PR), но устройство одинаковое.

Жизненный цикл

  1. Создать ветку, сделать коммиты, запушить:

    bash
    git switch -c feat/login
    # ... коммиты ...
    git push -u origin feat/login
  2. Открыть PR через UI (или через gh pr create / glab mr create). Указать target (обычно main), описание изменений, список ревьюеров.

  3. CI прогонит проверки - тесты, линтер, билд, security-scan. Зелёный CI - пред-условие для merge в большинстве проектов.

  4. Ревью. Коллеги комментируют код, оставляют suggestions, запрашивают изменения или approve.

  5. Цикл правок. Делаешь новые коммиты или amend в той же ветке, git push - PR обновляется автоматически.

  6. Merge. После approve и зелёного CI - кнопка merge. Стратегия (merge commit / squash / rebase-merge) выбирается тут (см. merge-strategies).

  7. Удаление ветки. После merge ветка обычно удаляется (на GitHub есть автонастройка).

Описание PR

Полезная структура (есть шаблоны в репо через .github/PULL_REQUEST_TEMPLATE.md):

markdown
## Зачем
В двух предложениях - мотивация. Ссылка на тикет.
## Что изменилось
- feat: добавлена форма password reset
- refactor: вынес валидатор в отдельный модуль
- test: покрытие 87% → 92%
## Как проверить
1. Запустить локально
2. Открыть /reset-password
3. Ввести email, проверить письмо
## Скриншоты
(если UI)
## Чек-лист
- [x] Тесты добавлены
- [x] Документация обновлена
- [ ] Migration требуется → запустить в staging

Хороший PR-description экономит часы ревьюеру и будущему разработчику, который наткнётся на изменение через год.

Размер PR

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

  • Маленький (десятки-сотни строк) - читается за один присест, ревьюер видит каждую строку.
  • Средний (несколько сотен) - всё ещё реально, но требует блок времени и концентрации.
  • Большой (>500-1000 строк) - ревьюер устаёт, скользит по диагонали, легко пропускает баги. Часто approve'ят, чтобы не блокировать.

Если PR разрастается - разбивай. Лучше серия из 4 небольших PR'ов, чем один на 800 строк.

Stacked PRs

Когда фича большая и разбить на независимые PR'ы не выходит - серия зависимых PR'ов, по очереди мержащихся:

PR #1: feat/login-form-skeleton    (target: main)
PR #2: feat/login-form-validation  (target: feat/login-form-skeleton)
PR #3: feat/login-form-styling     (target: feat/login-form-validation)

Каждый PR ревьюится отдельно, мержится в порядке зависимости. Инструменты типа Graphite / git-stack автоматизируют пересборку стека после merge базового PR.

Подводные камни

  • Не пушь force-with-lease на ветку PR, если кто-то её уже проверяет - комментарии к строкам отвалятся (новые SHA → нет привязки). Допустимо до начала ревью; после - лучше дополнительные коммиты + squash при merge.
    • Конфликт с main возникает, когда main ушёл вперёд. Решение - rebase своей ветки на main (git rebase main) или merge main в свою (git merge main). Rebase даёт более чистую историю, merge проще.
    • Auto-merge - настройка в GitHub: PR смержится автоматически, как только все условия (approve + CI) выполнены. Удобно, но помни про неё - иногда хочешь подержать PR.

§ команды

bash
gh pr create --title 'feat(auth): add login' --body 'Description'

Создать PR через GitHub CLI

bash
gh pr checkout 123

Локально переключиться на ветку PR #123

bash
gh pr review --approve

Approve PR из терминала

bash
gh pr merge --squash --delete-branch

Смержить PR squash-стратегией и удалить ветку

§ см. также

  • code-reviewCode reviewЧтение и обсуждение кода другого разработчика перед merge. Главная цель - поделиться контекстом, а не найти баги (баги - побочный результат). Хороший ревью улучшает код и распространяет знание о системе по команде.
  • merge-strategiesСтратегии merge PR (GitHub)В GitHub три кнопки для merge PR: Create a merge commit (--no-ff, с merge-коммитом), Squash and merge (один сжатый коммит без родителя из ветки), Rebase and merge (rebase + fast-forward без merge-коммита). Команды выбирают одну для всего проекта.
  • rebasegit rebaseПереписывает коммиты ветки, делая их потомками другого коммита. Создаёт новые SHA, история становится линейной. Безопасен только для веток, которые ещё никто, кроме автора, не видел.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки