извлечь из источника удаленные удаленные ветви? - PullRequest
391 голосов
/ 22 апреля 2011

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

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

Ответы [ 5 ]

711 голосов
/ 22 апреля 2011

Вам необходимо сделать следующее

git fetch -p

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

82 голосов
/ 04 мая 2012

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

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

git remote prune origin

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

29 голосов
/ 22 сентября 2015

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

git fetch -p

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

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

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

9 голосов
/ 03 марта 2015

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

git remote update --prune
6 голосов
/ 09 июля 2016

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

См. коммит 9e70233 (13 июня 2016 г.) Джефф Кинг (peff) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 1c22105 , 06 июля 2016 г.)

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

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

Итак, документация теперь гласит:

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

Это потому что:

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

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

...