Команда
git remote prune origin
удалит ссылки на вышестоящие ветки, которых уже нет на сервере origin, но не тронет соответствующие локальные ветки, которые были с ними связаны.
Удалить локальные ветки, которые связаны с несуществующими внешними можно примерно таким скриптом:
#!/bin/bash
# Получить список веток, которых уже нет на внешнем сервере
missing_branches=$(git branch -vv | grep ': gone]' | awk '{print $1}')
# Удалить каждую локальную ветку, у которой удалена её вышестоящая ветка.
for branch in $missing_branches; do
git branch -D $branch
done
Но я бы рекомендовал удалять такие ветки вручную, так как скрипт удалит ветки без предупреждения.