Git: как удалить ветку локально и на сервере
Чтобы удалить ветку в Git локально, выполните git branch -d имя-ветки. Чтобы удалить её на сервере, используйте git push origin --delete имя-ветки. Эти команды независимы: удаление в одном месте не затрагивает другое.
Удалить локальную ветку
git switch main # нельзя удалить ветку, на которой вы находитесь
git branch -d feature/login # безопасное удаление: только если ветка влита
git branch -D feature/experiment # принудительное удаление, даже если ветка не влитаФлаг | Когда сработает | Риск |
|---|---|---|
| Ветка уже влита в текущую ветку или в свой upstream | Безопасно, git откажется удалять чужую работу |
| Всегда | Коммиты, которых нет в других ветках, станут недоступны |
Удалить ветку на сервере
git push origin --delete feature/loginСокращённая запись git push origin :feature/login делает то же самое: пустое имя слева от двоеточия означает «отправить пустоту в эту ветку».
Убрать из списка ветки, удалённые на сервере
Если коллега или кнопка «Delete branch» в веб-интерфейсе удалили ветку, у вас остаётся устаревшая ссылка origin/имя. Очистить такие ссылки можно так:
git fetch --prune # обновить данные и убрать устаревшие ссылки
git config --global fetch.prune true # делать это при каждом fetch автоматически
git branch -r # проверить список удалённых ветокУдалить сразу несколько веток
Все локальные ветки, уже влитые в main, кроме самой main:
git branch --merged main | grep -v -E '^\*|^\s*main$' | xargs -r git branch -dКак вернуть удалённую ветку
Пока git не очистил старые коммиты, ветку можно восстановить по журналу reflog:
git reflog # найдите строку с последним коммитом ветки
git branch feature/login a1b2c3d # создайте ветку заново на этом коммитеЧастые вопросы
Почему git пишет «not fully merged» и не удаляет ветку?
В ветке есть коммиты, которых нет в текущей ветке. Если они вам не нужны, используйте -D. Если нужны, сначала влейте ветку или создайте на её основе другую.
Удаление ветки на сервере удалит её у коллег?
Нет. У коллег останутся локальные копии. Ссылка origin/имя исчезнет у них только после git fetch --prune.