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


442

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

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


Ответы:


813

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

git fetch -p

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


1
большое Вам спасибо. Я вручную удалил эти ветви раньше.
Максим Дмитриев

4
По какой-то причине ваша команда не сработала, но эта сработала для несуществующей удаленной ветки в моей ветке origin: git fetch -p origin когда я тогда делал git branch -r несуществующую удаленную ветку, больше не появлялся.
oldfartdeveloper

11
Для полноты: он должен быть таким же git remote prune originи аналогичным git pull --pruneупомянутым на stackoverflow.com/a/6127884/94687 и stackoverflow.com/a/17983126/94687 соответственно.
imz - Иван Захарьящев

6
ребята, когда я делаю это, это говорит, [deleted] (none) -> origin/ < branch name >и ветвь все еще показывается на локальном репо, есть идеи, почему?
Buddhi741

4
Я получаю сообщение о том, что мои ветви были удалены, но при запуске git branchвсе равно отображаются ветви, которые якобы были удалены.
sdfsdf

91

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

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

git remote prune origin

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


Мне нравится это, так как это не приносит ничего нового.
Marek R

30

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

git fetch -p

для того, чтобы синхронизировать ваш список филиалов. Руководство Git говорит

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

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



6

Что касается 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", перемещая операцию отсечения перед операцией извлечения. Таким образом, вместо предупреждения пользователя о конфликте, он автоматически исправляет его.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.