Когда я делаю, git fetch origin
и у источника есть удаленная ветвь, это, кажется, не обновляет это в моем репозитории. Когда я делаю git branch -r
это все еще показывает origin/DELETED_BRANCH
.
Как я могу это исправить?
Когда я делаю, git fetch origin
и у источника есть удаленная ветвь, это, кажется, не обновляет это в моем репозитории. Когда я делаю git branch -r
это все еще показывает origin/DELETED_BRANCH
.
Как я могу это исправить?
Ответы:
Вам нужно сделать следующее
git fetch -p
Это обновит локальную базу данных удаленных филиалов.
origin
: git fetch -p origin
когда я тогда делал git branch -r
несуществующую удаленную ветку, больше не появлялся.
git remote prune origin
и аналогичным git pull --prune
упомянутым на stackoverflow.com/a/6127884/94687 и stackoverflow.com/a/17983126/94687 соответственно.
[deleted] (none) -> origin/ < branch name >
и ветвь все еще показывается на локальном репо, есть идеи, почему?
git branch
все равно отображаются ветви, которые якобы были удалены.
С 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
) .
(Слиты Junio C Hamano - gitster
- в фиксации 1c22105 , 06 Jul 2016)
fetch
: документ, подтверждающий, что отсечение происходит перед извлечениемЭто было изменено в 10a6cc8 (
fetch --prune
: Run prune перед загрузкой, 2014-01-02), но, похоже, никто в этом обсуждении не осознавал, что мы явно рекламировали «после».
Итак, в документации сейчас говорится:
Перед извлечением удалите все ссылки на удаленное отслеживание, которые больше не существуют на удаленном
Это потому:
Когда у нас есть ветвь удаленного отслеживания с именем "
frotz/nitfol
" из предыдущей выборки, и у восходящего потока теперь есть ветвь с именем "frotz
", fetch не сможет удалить "frotz/nitfol
" с "git fetch --prune
" из восходящего потока. git сообщит пользователю, что нужно использовать «git remote prune
» для решения проблемы.Измените способ "
fetch --prune
", перемещая операцию отсечения перед операцией извлечения. Таким образом, вместо предупреждения пользователя о конфликте, он автоматически исправляет его.