6

В локальном репозитории вижу следующую картину:

|
|
* <branch_name> origin/<branch_name>
|

На сервере (битбакет) этой ветки уже нет и давно.

git push origin :<branch_name> 

логично выдает

remote ref doesn't exist

Как мне удалить локальную ссылку на несуществующую уже удаленную ветку?

  • 3
  • Оформите как ответ. Частично помогло, удалило часть уже не существующих на сервере веток. Часть осталось. Оставшиеся ветки удаляются --delete . Хотя их тоже на удаленке уже нет. Очень странное поведение битбакета. – user453575457 Oct 13 '16 at 07:49
  • это не удалит локал бранчи, их надо поудалять ручками – Утка Учится Укрываться Oct 13 '16 at 07:53
  • Про локал бранчи понятно, речь именно о ссылках, origin/branch_name на удаленые ветки которых реально там уже нет. Часть удаляет делетом, а вот оставщуюся часть - --prune. Почему то только некоторые ветки он считает удалено не существующими, хотя на сервере я не вижу не одну из них – user453575457 Oct 13 '16 at 07:55
  • Это не странное поведение битбакета, это обычное поведение гита. fetch --prune - он удаляет только референсы на удаленный репо и это логично. Если бы было не так: Вот была у вас ветка "mySuperFeature", и на удаленном репо она была. Потом админ вася решил почистить репо от фигни и вашу ветку совершенно случайно снес. Вы сделали fetch --prune и ваша фича незаметно потерялась. Все в отчаянии. – Утка Учится Укрываться Oct 13 '16 at 08:00
  • Вы не поняли опять :) я не говорю об удалении локальных веток. Я именно о ссылках, которые Вася на серваке давно удалил. Ссылки на эти ветки сервера висят. Например * local_branch origin/branch local_branch понятно что будет на месте после prune, origin/branch не все уходят, ( приходится git push origin :branch)в этом странность – user453575457 Oct 13 '16 at 08:13
  • аа, все, да, понял что Вы имеете в виду. Да, тогда это действительно на битбакете и в чем тут косяк не знаю) К удаленной репо есть доступ чтобы отладиться?) Я предполагаю что это какая-нибудь фича битбакета с доступами видимостью веток криво настроена – Утка Учится Укрываться Oct 13 '16 at 08:17
  • А может просто баг, я нашел пару похожих issues в их трекере – Утка Учится Укрываться Oct 13 '16 at 08:23

1 Answers1

7

Нужно выполнить команду git fetch с флагом prune.

git fetch --prune

Если удаленных репозиториев несколько, можно указать конкретный:

git fetch origin --prune

То же самое:

git remote prune origin

Это удалит референсы на ветки удаленного репозитория, которых больше не существует.

При этом у вас могут еще остаться локальные ветки с которыми вы работали и которые раньше ссылались на несуществующие ветки удаленного репо.

Эти ветки надо поудалять ручками с помощью:

git branch -d
Nick Volynkin
  • 34,094
  • 1
    Можно удалить все замерженные локальные: git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d. Это не совсем то же, но почти. – Nick Volynkin Oct 14 '16 at 11:58