Если удаленные ветки по-прежнему отображаются в Git на вашем Mac, выполните очистку (prune) ссылок удаленного отслеживания из локального репозитория. Откройте Терминал, перейдите в папку репозитория, проверьте, какой удаленный репозиторий нужно обновить, а затем выполните git fetch --prune origin. Это обновит полученные ссылки и удалит устаревшие, связанные с origin; команда не удаляет ветки с удаленного сервера и не затрагивает локальные ветки. Документация Git по git fetch
Что обновляется при очистке (prune)?
Удаленная ветка отслеживания (remote-tracking branch) — это ваша локальная запись о состоянии ветки в удаленном репозитории. Например, origin/feature-x представляет собой последнее полученное состояние удаленной ветки. Она существует отдельно от локальной ветки с именем feature-x. Если удаленная ветка удаляется, ваша локальная ссылка на нее может оставаться до тех пор, пока Git не выполнит очистку (prune). Стандартное сопоставление fetch в Git обычно сохраняет удаленные ветки в refs/remotes/origin/, хотя репозиторий может использовать и другую конфигурацию. В документации Git описано, как настроенные refspec для fetch сопоставляют удаленные ветки.
Очистка (pruning) сравнивает текущие ссылки на удаленном сервере с локальными ссылками, охватываемыми конфигурацией fetch этого удаленного репозитория, и затем удаляет ссылки, которые больше не существуют удаленно. Это приводит в порядок ваше локальное представление; это не команда для удаления веток на сервере. Это позволяет сделать вывод таких команд, как git branch --all, более читаемым, когда в репозитории накапливаются ссылки на старые ветки. Руководство Git по очистке (pruning)
Обновление ссылок из Терминала
Apple указывает zsh в качестве оболочки по умолчанию в Терминале на Mac, хотя Mac или управляемая среда могут быть настроены иначе. Приведенные ниже команды Git работают в стандартной конфигурации Терминала macOS. Руководство пользователя Терминала от Apple
- Откройте Терминал и перейдите в папку репозитория. Если путь содержит пробелы, заключите его в кавычки, например:
cd "/Users/sam/Projects/Client App"
Замените пример пути фактическим путем к вашему репозиторию. Если вы не уверены, где находитесь, команда pwd выведет текущий каталог. Выполняйте команды Git из каталога репозитория.
- Подтвердите репозиторий и имя удаленного подключения (remote):
git status --short --branch
git remote -v
Команда git remote -v выводит список настроенных имен удаленных репозиториев и их URL-адресов. origin встречается чаще всего, но используйте имя, отображаемое для того сервера, ссылки которого вы хотите обновить. Если в репозитории настроено несколько удаленных подключений, выполняйте очистку только для нужного.
- Предварительно просмотрите устаревшие ссылки перед их удалением:
git remote prune --dry-run origin
Git покажет, какие ссылки были бы удалены, не удаляя их на самом деле. Параметр dry-run относится к git remote prune; он не скачивает новые верхушки веток. Документация Git по git remote
- Если предварительный просмотр совпадает с ожидаемым, обновите и выполните очистку за один шаг:
git fetch --prune origin
Эта команда выполняет fetch в соответствии с настроенным refspec удаленного репозитория и удаляет устаревшие ссылки, подпадающие под это сопоставление. В выводе git fetch очищенные ссылки помечаются знаком -. Чтобы выполнить очистку без загрузки обновлений, используйте вместо этого git remote prune origin. В документации Git описаны оба разовых метода.
- Проверьте результат:
git branch --remotes
git branch --all
Список только удаленных веток показывает ветки удаленного отслеживания; список всех веток включает как удаленные ветки отслеживания, так и локальные. Ветка, отсутствующая в списке удаленных, может по-прежнему существовать локально, и очистка ее не удаляет.
Если устаревшая ссылка осталась
Сначала убедитесь, что вы указали правильное имя удаленного подключения. Затем проверьте конфигурацию fetch репозитория: удаленные репозитории могут быть настроены на отслеживание только выбранных веток, а пользовательские refspec меняют то, на какие ссылки влияют команды fetch и prune. Проверьте сопоставление с помощью команды git config --get-all remote.origin.fetch, заменив origin при необходимости. Если удаленный репозиторий настроен на отслеживание только части веток, ветки вне этой выборки могут вести себя не так, как ожидается при стандартном fetch. В Git объясняются refspec для fetch и их влияние на очистку (pruning).
Если команда сообщает об ошибке сети или аутентификации, Git не смог завершить получение данных из удаленного репозитория; устраните проблемы с подключением или доступом и повторите попытку. Избегайте добавления флага --prune-tags, если только вам явно не требуется очистка тегов: Git предупреждает, что явные refspec тегов могут привести к удалению локальных тегов, отсутствующих на этом удаленном сервере. В документации по очистке Git описана эта особенность тегов.
Используйте git fetch --prune origin, когда требуется одновременно получить актуальную информацию об удаленных ветках и выполнить очистку. Используйте сначала git remote prune --dry-run origin, если хотите проверить кандидатов на удаление, или git remote prune origin, если нужна очистка без скачивания обновлений веток.
Источники
Смена оболочки по умолчанию в Терминале на Mac — Служба поддержки Apple