Git: обновление информации об удаленном филиале

125

В репозитории git удаленная ветка, которую я не отслеживаю, была удалена. Когда я печатаю

git branch -r

удаленная ветка все еще отображается (и я могу это проверить)

Какую команду git мне нужно запустить, чтобы обновить эту информацию?

Баин Маркев
источник

Ответы:

39

Если вы выполните что-то вроде

git branch -d -r remote_name/branch_name

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

Решение:

git push origin :branch_name

удалит удаленную ветку (обратите внимание на ':') и

git branch -d branch_name

удалит вашу местную кассу.

( Ссылка )

Гаррет Хайд
источник
146
Вы также можете запустить git remote prune origin, чтобы очистить удаленные ссылки.
cmcginty
3
Это удалит все ветки, которые больше не отслеживаются удаленным репозиторием. Так что будьте осторожны.
Гаррет Хайд,
4
Я думаю, также полезно знать, что, хотя это немного более подробно, вы также можете использовать git push <remote> --delete <branchname>для удаления удаленных веток.
AeroCross,
Обычно это работает, но сегодня я столкнулся с ситуацией, когда удаленный список не обновлялся, поэтому я пытался удалить ветку, которой там не было. Таким образом, сначала требовалось решение @Flo ниже .
dgo
284

Если это были ветки в удаленном репозитории, которые были удалены, и вы хотите обновить все локальные ветки удаленного отслеживания сразу, вы можете использовать

$ git remote prune <remotename>

для удаления всех устаревших ветвей удаленного отслеживания для данного удаленного устройства (т.е. тех, которые следуют за ветвями, которые были удалены в удаленном репозитории).

См. git remoteДокументацию.

Якуб Наребски
источник
Спасибо @Casey и @Jakub за ваши ответы! Как получается, что информация об удаленном филиале, хранящаяся локально, не обновляется при следующем использовании git fetch?
JJD
4
@JJD: Потому что вы могли основывать свою работу на удаленной ветке, которой больше нет. Поэтому исчезновение без запроса считалось плохой идеей. Вот почему вам нужно явно обрезать ветки удаленного отслеживания.
Якуб Наребски
Удаляет ли "git gc" устаревшие удаленные ветки?
Джеймс Уолд
@JamesWald: Нет, это не так. git gcпросто упаковывает объекты и ссылки и удаляет объекты, на которые нет ссылок (с некоторым запасом прочности).
Якуб Наребски
186
git remote update --prune

Следует обновить ветки всех пультов, добавляя новые и удаляя удаленные.

Изменить: команда удаленного обновления в основном извлекает список веток на пульте дистанционного управления. Эта --pruneопция избавит вас от ваших локальных веток удаленного отслеживания, которые указывают на ветки, которые больше не существуют на пульте дистанционного управления .

Фло
источник
Это сработало для меня. Мне нужно было удалить удаленную ветку, которую по какой-то причине не удалось удалить с помощью обычного git push origin: <branch_name>
n0denine
Было бы правильно сказать, что этот ответ делает то же, что и ответ Якуба Наребски, и многое другое? То есть подрезает и скачивает обновления?
Фрэнк Тан
14

Также полезно для просмотра новых удаленных веток:

git fetch --all
Эйдан Донохо
источник
Это мне очень помогло. Некоторая ошибка в Visual Studio git не позволяет отображать новые ветки, созданные после клонирования. Эта команда помогает отображать новые ветки
Венкатеш Муниянди
хороший и простой, чувак, у
тебя
2

Вы можете комбинировать -rи -dфлаги для удаления удаленных филиалов.

mikerobi
источник
отличный совет! однако в этом случае есть несколько веток, которые уже были удалены, наверняка есть команда для получения этих обновлений
Баин Маркев,
2

Попробуйте эту команду

git gc --prune=now
MarceloCouto
источник