Как удалить ветку локально и в remote-репозитории?
Удаление веток — рутинная задача после завершения работы. Ветки нужно удалять и локально, и в remote, чтобы репозиторий не засорялся.
Локальное удаление: git branch -d <name> удаляет ветку, но только если она объединена с текущей (merged). Git проверит, что все коммиты ветки есть в текущей — если нет, выдаст ошибку. Это защита от потери работы. Команда git branch -D <name> удаляет принудительно, даже если есть несоединённые коммиты. Используйте -D только если уверены, что изменения не нужны — после удаления восстановить ветку можно только через reflog.
Удаление в remote: git push origin --delete <name> удаляет ветку на сервере (GitHub, GitLab). Сокращённая форма: git push origin :<name>. После удаления remote-ветки другие разработчики увидят её как "gone" при следующем git fetch.
Удаление tracking-веток: после удаления remote-ветки локальная tracking-копия (origin/<name>) остаётся. Очистите её: git fetch --prune или git remote prune origin. Это удаляет локальные ссылки на несуществующие remote-ветки.
Массовая очистка: git branch --merged main показывает ветки, объединённые с main — их можно безопасно удалять. Команда для удаления всех merged-веток кроме main: git branch --merged main | grep -v "main" | xargs git branch -d. Будьте осторожны — убедитесь, что не удалите ветку, на которой работаете.
Восстановление удалённой ветки: git reflog покажет хэш последнего коммита удалённой ветки. Выполните git branch <name> <hash> — ветка восстановится. Reflog хранит историю 90 дней, так что восстановление возможно в течение этого срока.
Хорошая практика: удаляйте feature-ветки сразу после merge в main. Это keeps веток чистым и облегчает навигацию. На GitHub можно настроить автоматическое удаление веток после merge: Settings → Options → Automatically delete head branches.