Git: atualizando informações de ramificação remota

125

Em um repositório git, um ramo remoto que não estou rastreando foi excluído. Quando digito

git branch -r

o ramo excluído ainda aparece (e eu posso dar uma olhada)

Qual comando git eu tenho que executar para atualizar essas informações?

Bain Markev
fonte

Respostas:

39

Se você executar algo como

git branch -d -r remote_name/branch_name

você remove apenas seu checkout local. Este comando não faz nada no repositório remoto, e é por isso que ele ainda aparece.

Solução:

git push origin :branch_name

removerá a ramificação remota (observe o ':') e

git branch -d branch_name

removerá seu checkout local.

( Referência )

Garrett Hyde
fonte
146
Você também pode executar o 'git remote prune origin' para limpar suas referências remotas.
cmcginty
3
Isso removerá todas as ramificações que não são mais rastreadas pelo repositório remoto. Então, tenha cuidado.
Garrett Hyde
4
Eu acho que também é útil saber que, embora um pouco mais detalhado, você também pode git push <remote> --delete <branchname>excluir ramificações remotas.
AeroCross
Isso geralmente funciona, mas hoje eu me deparo com uma situação em que a lista remota não foi atualizada, e estava tentando excluir um ramo que não estava lá. Portanto, a solução da @Flo abaixo foi necessária primeiro.
dgo 29/11
284

Se foram ramificações no repositório remoto que foram excluídas e você deseja atualizar todas as ramificações de rastreamento remoto local de uma só vez, pode usar

$ git remote prune <remotename>

excluir todas as ramificações de rastreamento remoto antigas para um determinado controle remoto (ou seja, aquelas que seguem as ramificações removidas no repositório remoto).

Veja a git remotedocumentação.

Jakub Narębski
fonte
Obrigado @Casey e @Jakub por suas respostas! Como é que as informações de filial remota armazenadas localmente não são atualizadas na próxima vez que eu uso git fetch?
JJD
4
@JJD: Porque você pode ter baseado seu trabalho em uma filial remota que não está mais aqui. O desaparecimento sem solicitar foi, portanto, considerado uma má idéia. É por isso que você precisa remover explicitamente as ramificações de rastreamento remoto.
Jakub Narębski
O "git gc" também limpa ramificações remotas antigas?
James Wald
@ JamesWald: Não, não. git gcapenas empacota objetos e refs e exclui objetos não referenciados enquanto estiver nele (com alguma margem de segurança).
Jakub Narębski
186
git remote update --prune

Deve atualizar todas as ramificações dos controles remotos, adicionando novas e excluindo as ramificações removidas.

Editar: o comando de atualização remota basicamente busca a lista de ramificações no controle remoto. A --pruneopção eliminará as ramificações de rastreamento remoto local que apontam para ramificações que não existem mais no controle remoto .

Flo
fonte
Isso funcionou para mim. Eu precisava remover uma filial remota que por algum motivo não foi capaz de ser removido pelo habitual 'git push origin: <branch_name>'
n0denine
Seria correto dizer que esta resposta faz o que a resposta de Jakub Narębski faz e muito mais? Ou seja, ele poda e busca atualizações?
Frank Tan
14

Também é útil para ver novas ramificações remotas:

git fetch --all
Aidan Donohoe
fonte
Isso me ajudou muito. Algum bug no Visual studio git impede a exibição dos novos ramos criados após a clonagem. Este comando ajuda a mostrar os novos ramos
Venkatesh Muniyandi
nice n cara thx simples, tem um crachá resposta bronze na casa :)
danday74
2

Você pode combinar os sinalizadores -re -dpara excluir ramificações remotas.

mikerobi
fonte
ótima dica! No entanto, neste caso, existem várias agências que já foram apagados, certamente há um comando para buscar essas atualizações
Bain Markev
2

Tente este comando

git gc --prune=now
MarceloCouto
fonte