Извлечь из источника удаленные удаленные ветви?
Когда я делаю 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 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