Извлечь из источника удаленные удаленные ветви?

Когда я делаю git fetch origin и у origin есть удаленная ветвь, она не обновляется в моем хранилище. Когда я делаю git branch -r это все еще показывает origin/DELETED_BRANCH,

Как я могу это исправить?

8 ответов

Решение

Вам нужно сделать следующее

git fetch -p

Это обновит локальную базу данных удаленных филиалов.

С http://www.gitguys.com/topics/adding-and-removing-remote-branches/

После того, как кто-то удалит ветку из удаленного репозитория, git не будет автоматически удалять ветви локального репозитория, когда пользователь выполняет git pull или git fetch. Однако, если пользователь хотел бы удалить все ветви отслеживания из своего локального репозитория, которые были удалены в удаленном репозитории, он может ввести:

git remote prune origin

Как примечание, параметр -p из git fetch -p на самом деле означает "чернослив".
В любом случае, удаленные ветви будут удалены из вашего локального репозитория.

Вам нужно сделать следующее

git fetch -p

для синхронизации вашего списка филиалов. Руководство Git говорит

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

Я лично люблю использовать git fetch origin -p --progress потому что он показывает индикатор прогресса.

Это сработало для меня.

git remote update --prune

Относительно git fetch -p, его поведение изменилось в Git 1.9, и только Git 2.9.x/2.10 отражает это.

Смотрите коммит 9e70233 (13 июня 2016 г.) Джеффа Кинга ( peff )
(Объединено Юнио С Хамано - gitster - в коммите 1c22105, 06 июля 2016 г.)

fetch: документ, что обрезка происходит перед извлечением

Это было изменено в 10a6cc8 (fetch --prune: Выполнить prune перед загрузкой, 2014-01-02), но, похоже, никто в этом обсуждении не понял, что мы явно рекламировали "после".

Итак, в документации сейчас говорится:

Перед извлечением удалите все ссылки удаленного отслеживания, которые больше не существуют на удаленном

Это потому:

Когда у нас есть ветка удаленного отслеживания с именем " frotz/nitfol "из предыдущей выборки, и у восходящего потока теперь есть ветвь с именем" frotz "извлечь не удастся" frotz/nitfol "с" git fetch --prune "из апстрима. git сообщит пользователю об использовании" git remote prune " решить проблему.

Измени путь " fetch --prune "работает путем перемещения операции удаления перед операцией извлечения. Таким образом, вместо предупреждения пользователя о конфликте, он автоматически исправляет его.

Для git а также Apple git новее, чем версия 2.x это сработало для меня:

      git remote prune origin

Если git fetch -p origin не работает по какой-то причине (например, из-за того, что исходное репо больше не существует или вы не можете до него добраться), другое решение - удалить информацию, которая хранится локально в этой ветке, выполнив из корня репо:

rm .git/refs/remotes/origin/DELETED_BRANCH

или если он хранится в файле .git/packed-refs удалив соответствующую строку, похожую на

7a9930974b02a3b31cb2ebd17df6667514962685 refs/remotes/origin/DELETED_BRANCH

Вот как вы обновляете информацию репо

git remote update
Другие вопросы по тегам