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?

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 )


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.


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 .


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

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.


ó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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.