Глиф Учебники

Как удалить ветку в Git

Справочник · Git · 2 минуты чтения

Удалить ветку у себя:

Терминал
$ git branch -d fix-login
Deleted branch fix-login (was 4b58db5).

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

Bash
git push origin --delete fix-login

Это две разные ветки: локальная и её копия на сервере. Удаление одной не трогает другую.

Ветка не слита: not fully merged

-d удаляет ветку, только если её коммиты уже слиты — в текущую ветку или в ту же ветку на сервере. Иначе Git откажется с сообщением the branch 'fix-login' is not fully merged и подскажет -D:

Bash
git branch -D fix-login

-D удаляет ветку вместе с коммитами, которых больше нет ни в одной ветке. Найти их потом можно только по хешу через git reflog, и то недолго. Перед -D убедитесь, что работа в ветке не нужна или уже слита на сервере (например, pull request принят со склейкой коммитов).

Нельзя удалить текущую ветку

Ветку, на которой вы стоите, удалить нельзя — Git ответит cannot delete branch 'fix-login'. Сначала переключитесь на другую:

Bash
git switch main
git branch -d fix-login

Ветки, которых на сервере уже нет

Ветку на сервере могли удалить коллеги или сам хостинг после слияния pull request. У вас в списке git branch -a она всё равно видна как remotes/origin/fix-login: это сохранённая копия с прошлого обмена. Убрать такие копии:

Bash
git fetch --prune

Чтобы Git делал это при каждом fetch и pull, включите настройку один раз:

Bash
git config --global fetch.prune true

Локальные ветки --prune не трогает — их удаляют сами через git branch -d.

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

При удалении Git пишет хеш последнего коммита: (was 4b58db5). По нему ветку можно создать заново:

Bash
git branch fix-login 4b58db5

Если сообщение уже не видно, найдите коммит в git reflog — по сообщению коммита или по строке checkout: moving from fix-login to main. Ветка, удалённая на сервере, восстанавливается так же: создайте её у себя и отправьте git push -u origin fix-login.

Подводные камни