Software Development Processes → Система контроля версий (Git) → Основное
Основная идея
Pull Request (PR) / Merge Request (MR) — это механизм для предложения изменений в кодовую базу с возможностью обсуждения, ревью и автоматических проверок перед слиянием. Это стандартный способ внесения изменений в командной разработке.
Ключевые этапы PR
Создание ветки — изоляция изменений от основной ветки
Коммиты — фиксация изменений с понятными сообщениями
Push — отправка ветки на сервер
Открытие PR — создание запроса на слияние с описанием
Code Review — проверка кода коллегами
CI/CD проверки — автоматические тесты и линтеры
Merge — слияние в целевую ветку
Преимущества Code Review
Обнаружение ошибок до попадания в production
Распространение знаний в команде
Повышение качества кода
Обучение через обратную связь
Терминология
PR (Pull Request) — термин GitHub
MR (Merge Request) — термин GitLab
Reviewer — проверяющий код
Approver — одобряющий изменения
Draft PR — черновик, не готовый к ревью
Частые ошибки на собеседованиях
Путают PR и merge — PR это запрос на merge, а не сам merge
Не знают разницу между PR и MR — функционально идентичны, разные названия
Забывают про CI/CD проверки в PR
Не упоминают squash merge и его преимущества
Не понимают роль Draft PR для работы в процессе
Введение и проблематика
В командной разработке недопустимо, чтобы каждый разработчик напрямую пушил код в основную ветку. Это приводит к нестабильному коду, необнаруженным багам и сложностям в отслеживании изменений.
Pull Request (GitHub) / Merge Request (GitLab) — это механизм для обсуждения и проверки изменений перед их интеграцией в основную ветку. Функционально идентичны, отличается только название.
Зачем нужен PR?
Code Review — проверка кода другими разработчиками
Автоматические проверки — CI/CD запускает тесты и линтеры
Документирование изменений — понятно что, зачем и как менялось
Контроль качества — код попадает в main только после одобрения
## SummaryКраткое описание что делает этот PR.## Changes- Добавлен компонент LoginForm- Реализован сервис AuthService с JWT- Добавлены unit-тесты## Screenshots (если применимо)[Скриншот интерфейса]## Testing- [ ] Unit тесты проходят- [ ] E2E тесты проходят- [ ] Ручное тестирование## Related IssuesCloses #123
⚠️
Маленькие PR проще ревьюить! Старайтесь делать PR на 200-400 строк кода. Большие PR часто получают поверхностный ревью.
Code Review
Роли в процессе
Роль
Ответственность
Author
Создатель PR, отвечает на комментарии, вносит правки
Reviewer
Проверяет код, оставляет комментарии
Approver
Имеет право одобрить PR для слияния
Maintainer
Финальное решение о merge
Что проверять при Code Review
Читаемость и понятность
Соответствие code style
Отсутствие дублирования
Понятные имена переменных и функций
Нет закомментированного кода
Нет console.log и отладочного кода
Типы комментариев
markdown
# Блокирующий (требует исправления)🔴 **Blocking:** Здесь SQL-инъекция, нужно использовать параметризованный запрос# Предложение (желательно исправить)🟡 **Suggestion:** Можно упростить этот цикл с помощью .map()# Вопрос❓ **Question:** Почему выбран именно этот подход?# Комплимент✨ **Nice:** Отличное решение с кешированием!# Нит (мелочь)📝 **Nit:** Лишний пробел в строке 42
CI/CD в Pull Request
Автоматические проверки запускаются при создании PR и каждом push в ветку. PR нельзя смержить, если проверки не пройдены.
Типичные проверки
yaml
# .github/workflows/pr-checks.ymlname:PR Checkson: [pull_request]jobs:lint:runs-on:ubuntu-lateststeps: - uses:actions/checkout@v4 - run:npm ci - run:npm run linttest:runs-on:ubuntu-lateststeps: - uses:actions/checkout@v4 - run:npm ci - run:npm testbuild:runs-on:ubuntu-lateststeps: - uses:actions/checkout@v4 - run:npm ci - run:npm run build