MyTetra Share
Делитесь знаниями!
Как в Git удалить внешнюю неотслеживаемую ветку
Время создания: 11.03.2024 12:06
Текстовые метки: git, удалить, ветка, внешняя, удаленная, без привязки, неотслеживаемая
Раздел: Компьютер - Программирование - Системы контроля версий (VCS) - Git
Запись: xintrea/mytetra_syncro/master/base/1710147981zthk18tang/text.html на raw.github.com

Внимание! Возможно, все ниже описываемое написано неправильно, возможно что автор не понимает, какая ситуация с ветками произошла и где существуют ветки, и где хранятся ссылки на ветки. Но по-факту, написанная здесь команда помогла в похожем случае.



Если сложилась такая ситуация, что локальная ветка была удалена, а внешняя ветка, расположенная на удаленном репозитарии, не удаляется, то скорее всего это значит, что удаленная ветка изначально не была связана с локальной.


Проблема в том, что удаление внешней неотслеживаемой ветки будет приводить к ошибке:



git push origin -d unnecessaryBranch

error: unable to delete 'unnecessaryBranch': remote ref does not exist

error: не удалось отправить некоторые ссылки в «ssh://user@server:/home/git/repo.git»


git push origin -d remotes/origin/unnecessaryBranch

error: unable to delete 'remotes/origin/unnecessaryBranch': remote ref does not exist

error: не удалось отправить некоторые ссылки в «ssh://user@server:/home/git/repo.git»



Удаление через опцию -r команды git branch тоже будет невозможно, так как удаляемая ветка не привязана к локальной:



git branch -d -r unnecessaryBranch

error: внешняя отслеживаемая ветка «unnecessaryBranch» не найдена.


git branch -d -r remotes/origin/unnecessaryBranch

error: внешняя отслеживаемая ветка «remotes/origin/unnecessaryBranch» не найдена.



Что делать в этом случае? Нужно дать команду, которая получит изменения с сервера и засинхронизирует локальные и удаленные ветки:



git fetch --all -p



Что делает эта команда - понять довольно сложно. Перевод документации на опцию -p достаточно безумен, чтобы его рассматривать как внятное объяснение:



Вариант 1: Перед извлечением удалите все ссылки на удаленное отслеживание, которые больше не существуют на удаленном устройстве. Теги не подлежат удалению, если они извлекаются только из-за автоматического следования тегов по умолчанию или из-за параметра --tags. Однако, если теги извлекаются из-за явного указания refspec (либо в командной строке, либо в удаленной конфигурации, например, если удаленный сервер был клонирован с параметром --mirror), то они также подлежат удалению. Предоставление --prune-tags - это сокращение от предоставления tag refspec.


Вариант 2: Перед извлечением удалите любые удаленные отслеживаемые ссылки, которых больше нет на удаленном сервере. Теги не подвергаются усечению, если они извлекаются только из-за автоматического следования за тегами по умолчанию или из-за опции --tags. Однако, если теги извлекаются из-за явного refspec'а (либо в командной строке, либо в конфигурации удаленного сервера, например, если удаленный сервер был клонирован с опцией --mirror), то они также подвержены усечению. Указание --prune-tags является сокращением для предоставления refspec'а тегов.



Но факт в том, что эта команда поможет удалить реально неиспользуемые ветки на удаленном сервере.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования