Git: как удалить ветку локально и на сервере

Категория: Git · Язык: Bash · Обновлено:

Чтобы удалить ветку в Git локально, выполните git branch -d имя-ветки. Чтобы удалить её на сервере, используйте git push origin --delete имя-ветки. Эти команды независимы: удаление в одном месте не затрагивает другое.

Удалить локальную ветку

Bash
git switch main                      # нельзя удалить ветку, на которой вы находитесь
git branch -d feature/login          # безопасное удаление: только если ветка влита
git branch -D feature/experiment     # принудительное удаление, даже если ветка не влита

Флаг

Когда сработает

Риск

-d

Ветка уже влита в текущую ветку или в свой upstream

Безопасно, git откажется удалять чужую работу

-D

Всегда

Коммиты, которых нет в других ветках, станут недоступны

Удалить ветку на сервере

Bash
git push origin --delete feature/login

Сокращённая запись git push origin :feature/login делает то же самое: пустое имя слева от двоеточия означает «отправить пустоту в эту ветку».

Убрать из списка ветки, удалённые на сервере

Если коллега или кнопка «Delete branch» в веб-интерфейсе удалили ветку, у вас остаётся устаревшая ссылка origin/имя. Очистить такие ссылки можно так:

Bash
git fetch --prune                    # обновить данные и убрать устаревшие ссылки
git config --global fetch.prune true # делать это при каждом fetch автоматически
git branch -r                        # проверить список удалённых веток

Удалить сразу несколько веток

Все локальные ветки, уже влитые в main, кроме самой main:

Bash
git branch --merged main | grep -v -E '^\*|^\s*main$' | xargs -r git branch -d

Как вернуть удалённую ветку

Пока git не очистил старые коммиты, ветку можно восстановить по журналу reflog:

Bash
git reflog                           # найдите строку с последним коммитом ветки
git branch feature/login a1b2c3d     # создайте ветку заново на этом коммите

Частые вопросы

Почему git пишет «not fully merged» и не удаляет ветку?

В ветке есть коммиты, которых нет в текущей ветке. Если они вам не нужны, используйте -D. Если нужны, сначала влейте ветку или создайте на её основе другую.

Удаление ветки на сервере удалит её у коллег?

Нет. У коллег останутся локальные копии. Ссылка origin/имя исчезнет у них только после git fetch --prune.