Предпросмотр пул-реквеста
Просмотр диффа в браузере говорит вам, хорошо ли читается код. Он не говорит, запускается ли ещё приложение. Чтобы это выяснить, надо запустить ветку — и вот тут люди застревают, потому что пул-реквест из форка живёт в репозитории, который вы никогда не клонировали и в который часто не можете пушить.
Локальный предпросмотр решает это фактом, который большинству никогда не приходится узнавать: форджи публикуют голову каждого пул-реквеста как обычную git-ссылку в целевом репозитории. Форк не обязан быть доступен, API-токен не нужен, и второй remote не добавляется. Один фетч — и код у вас на диске.

| Хостинг | Где живёт голова PR |
|---|---|
| GitHub, GitHub Enterprise, Gitea, Forgejo, Gogs | refs/pull/<n>/head |
| GitLab (облако и self-hosted) | refs/merge-requests/<n>/head |
| Bitbucket Cloud, Bitbucket Server | refs/pull-requests/<n>/from |
| Azure DevOps | refs/pull/<n>/merge |
Gitcito прощупывает все четыре за один ls-remote, так что незнакомый или
self-hosted фордж работает, если он следует одному из этих соглашений.
Как открыть
- Список пул-реквестов в боковой панели — кнопка со стрелкой на любой записи. Это работает для любого хостинга, в отличие от подробного вида, который есть только для GitHub.
- Палитра команд: Предпросмотр пул-реквеста локально.
- Внутри подробного вида пул-реквеста, рядом с кнопкой «открыть в браузере».
Что вы ему даёте
Remote — репозиторий, против которого открыт пул-реквест, обычно
origin. Не форк.
Пул-реквест — номер или вставленный URL из браузера. 7, #7 и
https://github.com/owner/repo/pull/7 работают одинаково; как и формы URL
GitLab, Bitbucket и Azure DevOps. Нажмите Найти, и Gitcito сообщит, какую
ссылку он разрешил и на какой коммит она указывает, ещё до того как что-либо
будет получено.
Удалённая ветка — вторая вкладка, на случай когда никакой PR-ссылки найти нельзя: хостинг их не публикует или вы просто хотите попробовать ветку. Укажите имя ветки в том виде, в каком оно существует на remote.
Два способа применить
Ни один не пишет коммит. Это сделано намеренно — предпросмотр, от которого нельзя просто уйти, никакой не предпросмотр.
| Режим | Что происходит | Как отменить |
|---|---|---|
| Локальная ветка | Ссылка выгружается в собственную ветку (pr/7 по умолчанию) и переключается на неё. Остальные ваши ветки не тронуты. |
Отмена возвращает на ветку, где вы были, и удаляет ветку предпросмотра. |
| Слияние без коммита | Ссылка сливается в текущую ветку с --no-commit --no-ff, оставляя объединённое дерево в индексе, чтобы вы могли собрать и протестировать. |
Отмена прерывает слияние. |
Повторный предпросмотр того же пул-реквеста переиспользует ту же ветку, двигая её на новую голову — удобно, когда автор пушит исправление, пока вы тестируете. Если такая ветка уже существует, Gitcito говорит об этом и спрашивает, прежде чем сбрасывать её, потому что любой коммит, живущий только там, был бы потерян.
Чего он делать не станет
- Он не может выдумать ссылку, которую хостинг не публикует. Некоторые self-hosted конфигурации отключают PR-ссылки; в некоторых форджах их никогда не было. Вы получите внятное «нет ссылки для #n» и вкладку удалённой ветки как выход.
- Он не получает теги. Предпросмотр не должен затаскивать чужое пространство имён тегов в ваш репозиторий.
- Режиму слияния нужно чистое рабочее дерево. Git отказывается сливать поверх незакоммиченной работы; сначала стеш.
- Предпросмотр — это не ревью. Он кладёт код на вашу машину — он ничего не одобряет, не комментирует и не сливает. Это хостинги и пул-реквесты.
- Приватные форки остаются приватными. PR-ссылку отдаёт целевой репозиторий, так что доступ определяется вашими учётными данными для этого remote — см. безопасность.
Уборка
Ветка предпросмотра — обычная ветка: удалите её из боковой панели, когда закончите, или нажмите отмену сразу после предпросмотра. Незакоммиченное слияние-предпросмотр можно отбросить отменой — или разрешить и закоммитить, если вы всё-таки решили, что оно вам нужно; в этот момент оно перестаёт быть предпросмотром и становится слиянием.