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.