Entre as informações apresentadas por git help fetch, existe este pequeno item:
-p, --prune
After fetching, remove any remote-tracking branches which no longer exist on the remote.
Então, talvez, git fetch -pé o que você está procurando?
EDIT: Ok, para aqueles que ainda debatem esta resposta três anos após o fato, aqui está um pouco mais de informações sobre por que eu a apresentei ...
Primeiro, o OP diz que deseja "remover também as ramificações locais criadas a partir dessas ramificações remotas [que não estão mais no controle remoto]". Isso não é inequivocamente possível em git. Aqui está um exemplo.
Digamos que eu tenha um repositório em um servidor central e ele tenha duas ramificações, chamadas Ae B. Se eu clonar esse repo no meu sistema local, meu clone terá refs locais (ainda não são ramificações reais) chamados origin/Ae origin/B. Agora, digamos que eu faça o seguinte:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C <some hash>
Os fatos pertinentes aqui são que, por algum motivo, escolhi criar uma ramificação no repositório local que tenha um nome diferente da sua origem e também tenho uma ramificação local que ainda não existe no repositório de origem.
Agora, digamos que eu remova os ramos Ae Bno repositório remoto e atualizo meu repositório local ( git fetchde alguma forma), o que faz com que meus representantes locais origin/Ae origin/Bdesapareçam. Agora, meu repo local tem três ramos ainda, A, Z, e C. Nenhuma delas possui uma ramificação correspondente no repositório remoto. Dois deles foram "criados a partir de ... ramificações remotas", mas mesmo que eu saiba que costumava haver uma ramificação chamada Bna origem, não tenho como saber que Zfoi criada a partir deB, porque foi renomeado no processo, provavelmente por um bom motivo. Então, realmente, sem algum processo externo que registre os metadados de origem da ramificação, ou um humano que conhece o histórico, é impossível dizer qual das três ramificações, se houver, o OP está mirando para remoção. Sem algumas informações externas que gitnão são mantidas automaticamente para você, git fetch -pé o mais próximo possível e qualquer método automático para literalmente tentar o que o OP pediu corre o risco de excluir muitas ramificações ou perder algumas que o OP faria de outra forma deseja excluir.
Também existem outros cenários, como se eu crie três ramificações separadas origin/Apara testar três abordagens diferentes de alguma coisa e depois origin/Adesapareça. Agora eu tenho três ramificações, que obviamente não podem corresponder ao nome, mas foram criadas a partir de origin/A, portanto, uma interpretação literal da questão dos OPs exigiria a remoção das três. No entanto, isso pode não ser desejável, se você puder encontrar uma maneira confiável de combiná-los ...