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флаги для удаления удаленных филиалов.


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

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