Что такое Pull Request
Pull Request (PR) — запрос на слияние кода из одной ветки в другую
Функции PR:
- Показывает все изменения между ветками
- Позволяет обсудить код
- Дает возможность оставить комментарии к строкам
- Служит официальным запросом на слияние (merge)
Процесс:
- Разработчик создает PR: рабочая ветка → main
- Ревьюер проверяет код
- Оставляет комментарии (если нужны правки)
- Разработчик исправляет
- Ревьюер одобряет (Approve)
- Код вливается в main
Создание PR через желтый баннер
На главной странице репозитория:
ваша-ветка had recent pushes
[Compare & pull request]
- GitHub автоматически заметил новую ветку
- Предлагает создать PR
- Нажать Compare & pull request
Выбор веток (КРИТИЧНО!)
Вы видите два дропдауна:
base: main ← compare: ваша-ветка
base — ветка КУДА вливаем (должна быть main)
compare — ветка ОТКУДА берем (ваша рабочая ветка)
Направление: ваша-ветка → main (справа налево)
⚠️ Если перепутаете — PR создастся наоборот!
Статус слияния:
✓ Able to merge
- Нет конфликтов
- Git может слить автоматически
- Всё хорошо!
Заполнение информации о PR
Title (Заголовок):
- GitHub автоматически подставляет сообщение последнего коммита
- Можно оставить или изменить
- Для учебных задач: префикс + краткое описание
Description (Описание):
- Подробное описание что сделано
- Вопросы к ревьюеру
- Примечания
- Можно оставить пустым для учебных задач
Files changed:
- Предпросмотр всех изменений
- Diff с добавленными/удаленными строками
- Можно проверить перед созданием
Создание PR
Нажать Create pull request
Страница Pull Request
Заголовок и номер:
название-PR #N
- #1, #2, #3 — порядковый номер PR в репозитории
Статусы PR:
- Open (Открыт) — ждет ревью и слияния
- Merged (Слит) — код влит в main
- Closed (Закрыт) — отменен без слияния
Вкладки:
- Conversation — обсуждение, комментарии, история
- Commits — список всех коммитов в PR
- Files changed — diff с кодом
Вкладка Conversation
Содержимое:
- История действий (кто создал, когда)
- Информация о ветках
- Комментарии (ваши и ревьюера)
- Секция для новых комментариев
Кнопка Merge pull request:
- Для влития кода в main
- В реальных командах: только у тимлида/ревьюера
- В учебном проекте: у вас (владелец репо)
- ⚠️ НЕ жмите до одобрения ревьюера!
Вкладка Commits
- Список всех коммитов, которые войдут в PR
- Автор, дата, хеш каждого коммита
- Если несколько коммитов — все видны
Вкладка Files changed
- Полный diff всех изменений
- Можно оставлять комментарии к строкам кода
- Навести мышку → синий плюсик → Add a comment
Комментарии к строкам:
- Кликнуть на плюсик у строки
- Написать комментарий/вопрос
- Add single comment — разовый комментарий
- Комментарий появится в Conversation
Ссылка на PR (самое важное!)
URL в адресной строке:
https://github.com/username/repo/pull/N
Это ваш ответ на задачу!
Куда отправлять:
- В бот курса
- Преподавателю
- В форму для проверки
- Куда требуется по условиям
Ревьюер откроет ссылку → увидит код → оставит комментарии или одобрит
Критичная ошибка: НЕ создавайте новый PR
Неправильно после комментариев ревьюера:
- Исправить код
- Создать коммит
- Создать НОВЫЙ Pull Request
Будет два PR на одну задачу — путаница!
Правильно:
- Исправить код в той же ветке
- Создать новый коммит
- Пушить (Commit and Push)
- Pull Request автоматически обновится!
Принцип: Один PR на одну задачу, от начала до конца.
Автоматическое обновление PR
GitHub отслеживает ветку:
- Новый коммит в ветке → автоматически подтянется в PR
- Обновится список коммитов
- Обновится diff (Files changed)
- Ревьюер увидит новые изменения
Так происходит весь цикл правок до одобрения.
Защита ветки main (Branch Protection)
В реальных проектах:
- На ветке main стоит защита
- Нельзя пушить напрямую в main
- Слить PR может только ревьюер/тимлид
- Требуется минимум 1 Approve
В учебном проекте:
- Вы владелец → можете слить сами
- Но следуйте процессу: сливать только после Approve
Альтернативный способ создания PR
Если желтого баннера нет:
- Перейти на вкладку Pull requests
- Нажать New pull request
- Выбрать ветки: base: main, compare: ваша-ветка
- Проверить изменения
- Нажать Create pull request
- Заполнить информацию
Результат тот же.