Draft PR - это обычный pull request в специальном состоянии. Он существует на сервере, его виден всем, на нём запускается CI - но GitHub знает, что автор ещё работает, и:
- Не назначает reviewer'ов автоматически (по CODEOWNERS).
- Не отправляет notification «requested your review».
- Блокирует merge до перевода в ready.
Это формализация старой практики «PR с префиксом WIP в заголовке». Draft умеет то же самое, но GitHub помогает соблюдать правила.
Зачем draft
- Получить feedback на ранний прототип. Открываешь draft, кидаешь ссылку в чат: «вот черновик, посмотрите подход, не смотрите детали». Reviewer'ы понимают, что это не final.
- Прогнать CI до того, как считаешь PR готовым. Иногда нужно увидеть «зелёное» или «красное» от тестов, прежде чем дать на review коллегам. Draft позволяет это без шума.
- Зафиксировать работу публично. Команда видит, что ты что-то делаешь, может зайти и обсудить, но никто не зовётся ревьюить прямо сейчас.
- Stacked PRs. Зависимые PR'ы часто открывают как draft, и переводят в ready по очереди, когда базовый PR смержен.
Создание
# через gh
gh pr create --draft
# или через UI: при создании PR нажать на dropdown рядом с
# кнопкой «Create pull request» и выбрать «Create draft pull request»
Перевод в ready
gh pr ready # текущий PR (на текущей ветке)
gh pr ready 123 # конкретный по номеру
Или в UI кнопка «Ready for review». После этого:
- CODEOWNERS назначает reviewer'ов.
- Reviewer'ы получают notification.
- Merge становится возможным (при выполнении остальных условий).
Обратное преобразование тоже есть:
gh pr ready --undo
Полезно, если перевёл в ready преждевременно.
Подводные камни
- Draft не значит «приватный». PR виден всем, кто видит репо. Если хочется приватной работы - используй приватную ветку или приватный fork.
- CI всё равно работает. Если у вас платный CI и обычная fight за раннеры, draft не экономит ресурсы. Иногда команды настраивают workflow с условием «не запускать на draft».
- CODEOWNERS не назначается, но можно вручную. Если хочешь
конкретного reviewer'а даже на draft - добавь через
gh pr edit --add-reviewer @alice. - На некоторых тарифах GitHub draft PR недоступен (старые бесплатные private репо). На большинстве современных доступен.
Альтернатива: коммиты в feature-ветке без PR
Если работа очень ранняя, иногда проще просто коммитить в feature-ветку без открытия PR. Когда захочется feedback - тогда и откроешь draft. Open draft PR полезен, когда хочется CI и публичная видимость; до этого момента иногда удобнее не показывать недописанный код.