Когда я делаю git fetch origin, а у origin есть удаленная ветвь, она, похоже, не обновляет ее в моем хранилище.Когда я делаю git branch -r, он все еще показывает origin/DELETED_BRANCH.
git fetch origin
git branch -r
origin/DELETED_BRANCH
Как я могу это исправить?
Вам необходимо сделать следующее
git fetch -p
Это обновит локальную базу данных удаленных филиалов.
С http://www.gitguys.com/topics/adding-and-removing-remote-branches/
После того, как кто-то удалит ветку из удаленного репозитория, git не будет автоматически удалять ветви локального репозитория, когда пользователь git pull или git fetch. Однако, если пользователь хотел бы иметь все отслеживание веток, удаленных из их локального хранилища, которые были удалены в удаленном хранилище, они могут набрать: git remote prune origin
После того, как кто-то удалит ветку из удаленного репозитория, git не будет автоматически удалять ветви локального репозитория, когда пользователь git pull или git fetch. Однако, если пользователь хотел бы иметь все отслеживание веток, удаленных из их локального хранилища, которые были удалены в удаленном хранилище, они могут набрать:
git remote prune origin
Как примечание, параметр -p из git fetch -p фактически означает "обрезать". В любом случае, выбранные вами удаленные ветви будут удалены из вашего локального репозитория.
Вам нужно сделать следующее
для синхронизации вашего списка филиалов. В руководстве git написано
-p, --prune После извлечения удалите все ссылки на удаленное отслеживание, которые больше не существуют на пульте. Теги не подлежат сокращению, если они выбираются только из-за автоматического следования тега по умолчанию или из-за опции --tags. Однако, если теги выбираются из-за явного refspec (либо в командной строке, либо в удаленной конфигурации, например, если пульт был клонирован с параметром --mirror), то они также подлежат сокращению.
-p
--prune
--tags
--mirror
Мне лично нравится использовать git fetch origin -p --progress, потому что он показывает индикатор прогресса.
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) . (Объединено с Junio C Hamano - gitster - в коммит 1c22105 , 06 июля 2016 г.)
peff
gitster
fetch: документ, в котором обрезка происходит до извлечения Это было изменено в 10a6cc8 (fetch --prune: запускать prune перед извлечением, 2014-01-02), но, похоже, никто в этом обсуждении не понял, что мы явно рекламировали «после».
fetch
Это было изменено в 10a6cc8 (fetch --prune: запускать prune перед извлечением, 2014-01-02), но, похоже, никто в этом обсуждении не понял, что мы явно рекламировали «после».
fetch --prune
Итак, документация теперь гласит:
Перед извлечением удалите все ссылки удаленного отслеживания, которые больше не существуют на удаленном
Это потому что:
Когда у нас есть ветвь удаленного отслеживания с именем "frotz/nitfol" из предыдущей выборки, и у восходящего потока теперь есть ветвь с именем "frotz", fetch не сможет удалить "frotz/nitfol" с помощью "git fetch --prune "вверх по течению. git сообщит пользователю, что нужно использовать «git remote prune» для решения проблемы. Измените способ работы fetch --prune, переместив операцию сокращения перед операцией извлечения. Таким образом, вместо предупреждения пользователя о конфликте, он автоматически исправляет его.
Когда у нас есть ветвь удаленного отслеживания с именем "frotz/nitfol" из предыдущей выборки, и у восходящего потока теперь есть ветвь с именем "frotz", fetch не сможет удалить "frotz/nitfol" с помощью "git fetch --prune "вверх по течению. git сообщит пользователю, что нужно использовать «git remote prune» для решения проблемы.
frotz/nitfol
frotz
git fetch --prune
git remote prune
Измените способ работы fetch --prune, переместив операцию сокращения перед операцией извлечения. Таким образом, вместо предупреждения пользователя о конфликте, он автоматически исправляет его.