GitHub4 мин чтения2026-03-06

Как удалить pull request в GitHub: полный гайд для разработчика

Вы когда-нибудь создавали PR и потом думали: "Боже, зачем я это запушил?" Я — да. Несколько раз. Удалять PR в GitHub на самом деле просто, но есть нюансы, котор

Вы когда-нибудь создавали PR и потом думали: "Боже, зачем я это запушил?" Я — да. Несколько раз. Удалять PR в GitHub на самом деле просто, но есть нюансы, которые никто не объясняет в документации. Поговорим обо всём по порядку.

Самый простой способ: закрыть PR через веб-интерфейс

Сначала самое очевидное. Вы открываете свой PR на GitHub, скроллите вниз и видите кнопку "Close pull request". Нажимаете — и готово. PR больше не активный.

Но тут важный момент: закрытие PR не удаляет ветку. Ветка остаётся в репозитории, занимает место, и может запутать команду. Поэтому после закрытия нужно удалить ветку.

GitHub часто предлагает это сделать автоматически прямо после закрытия. Видите кнопку "Delete branch"? Нажимайте. Если не видите, ничего страшного — удалим вручную.

Локально удаляем ветку:

git branch -d имя-вашей-ветки

Если ветка не merged (не влита в основную), Git выругается. Тогда:

git branch -D имя-вашей-ветки

Флаг -D — это фактически -d --force. Удалит ветку в любом случае.

Удаляем из удалённого репозитория:

git push origin --delete имя-вашей-ветки

Или покороче:

git push origin :имя-вашей-ветки

Это старый синтаксис, но он работает. Смотрите, что вам привычнее.

Что если PR уже merged?

Честно? Большинство разработчиков думают, что если PR merged, его нельзя "удалить". Это не совсем верно.

Если PR уже влил код в main или develop, у вас есть несколько вариантов:

Вариант 1: Просто закрыть PR

Да, PR может быть merged и всё ещё видимым в списке. Закрываете его через веб-интерфейс, удаляете ветку. Сам код остаётся в истории. Это нормально.

Вариант 2: Сделать revert

Если нужно откатить именно код, а не просто скрыть PR:

git revert -m 1 <commit-hash>

Здесь -m 1 означает "оставить первого родителя коммита" (обычно это main). После этого создаёте новый PR с revert-коммитом.

git log --oneline | head -5
# Находите хеш merge-коммита
git revert -m 1 abc1234
git push origin feature/fix-something

Вариант 3: Использовать GitHub Actions для автоудаления

По-хорошему, можно настроить автоматическое удаление веток после merge. Создаёте .github/workflows/cleanup.yml:

name: Delete merged branches
on:
  pull_request:
    types:
      - closed

jobs:
  delete-branch:
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
      - uses: dawidd6/action-delete-branch@v3
        with:
          github_token: ${{ github.token }}
          branches: ${{ github.event.pull_request.head.ref }}

Сохраняете в репозитории, и теперь каждый merged PR автоматически удаляет свою ветку. Удобно, когда в команде 10+ человек и веток разрастается.

Удаление через GitHub CLI

Если вы работаете в терминале (а разработчик, который не работает в терминале — это не разработчик), есть gh:

gh pr close <номер-PR>

Закроет PR. Чтобы удалить ветку сразу:

gh pr close <номер-PR> --delete-branch

Это одна команда вместо трёх. Удобно для скриптов и автоматизации.

Если вы работаете с несколькими PR одновременно, можно удалить несколько веток:

gh pr list --state closed --json number,headRefName -q '.[] | select(.number > 100 and .number < 110) | .headRefName' | xargs -I {} git push origin --delete {}

Звучит страшно, но это просто: берёт список закрытых PR с номерами 100-110 и удаляет их ветки. Работает.

Важные нюансы, которые не очевидны

Draft PR

Если вы создали PR как Draft (черновик), а потом передумали — тоже просто закрываете и удаляете ветку. Никаких уведомлений никому не пойдёт. Это хорошо, когда вы экспериментируете.

PR с статус-чеками и CI/CD

Часто PR привязаны к GitHub Actions, которые запускаются при каждом пуше. Если вы удалили ветку, экшены на этой ветке не запустятся, но история в Actions останется. Это не проблема.

Если же вы хотите очистить историю Actions, нужно удалить сам workflow-файл из ветки перед удалением. Но обычно это не требуется.

PR в форках

Если вы делали PR из форка (fork) репозитория, удаление веток работает так же, только вам нужно удалить ветку в своём форке:

git push your-fork-url --delete feature-branch

GitHub автоматически заметит, что ветка удалена, и предложит закрыть PR. Или вы просто закроете его вручную.

Когда не нужно удалять PR

Парадоксально, но иногда PR полезно оставить. Например:

GitHub сохраняет всю историю, поэтому даже удалённую ветку можно восстановить, если нужно.

Совет от себя

На одном проекте мы заметили, что веток разрастается так, что никто не может нормально работать с git branch. Решили это так: настроили в CI/CD правило, что PR можно merge только если все чеки пройдены. А потом — автоматическое удаление ветки после merge.

Плюс — интегрировали Distiq. Бот автоматически проверяет каждый PR и оставляет комментарии прямо в коде. Это помогает отловить ошибки до merge, и тогда не нужно потом делать revert.

Если вы тоже устали от неконтролируемого количества веток и хотите, чтобы процесс review был быстрее — попробуйте автоматизацию. GitHub Actions + Distiq решают 90% проблем.

Попробуйте Distiq для автоматического code review

AI-бот анализирует каждый MR/PR и оставляет комментарии с замечаниями. Интеграция за 2 минуты.

Попробовать бесплатно

Похожие статьи