Git diz que ref remoto não existe quando eu excluo ramificação remota

130

Eu corri git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Eu quero excluir minha filial remota

eu tentei

git push origin --delete remotes/origin/test

Eu tenho

erro: não é possível excluir 'controles remotos / origem / teste': a referência remota não existe

Como isso não existe?

Eu fiz um git branch -ae vi listado.

Eu perdi alguma coisa ?

cyber8200
fonte
1
git branch -alistará as ramificações no seu local e não no seu controle remoto. Certo?
Eu acho que todos eles. Não tenho certeza.
cyber8200
2
Ele mostrará as ramificações remotas no seu local. Não listará todas as ramificações remotas.
1
@peterh Parece-me que está realmente perguntando "por que não consigo excluir uma filial remota" (provavelmente quando a filial foi excluída do controle remoto, mas a referência remota ainda está presente localmente) e, portanto, não é uma duplicata, mas poderia fazer com um título mais claro
Andrew Spencer
1
Eu fiz uma edição para o título, espero que este seja mais perto da questão intenção
Andrew Spencer

Respostas:

259

O comando git branch -amostra ramificações remotas que existem no seu repositório local . Isso pode parecer um pouco confuso, mas para entendê-lo, é necessário entender que existe uma diferença entre um ramo remoto e um ramo que existe em um repositório remoto. Ramificações remotas são ramificações locais que são mapeadas para ramificações do repositório remoto. Portanto, o conjunto de ramificações remotas representa o estado do repositório remoto.

A maneira usual de atualizar a lista de ramificações remotas é usar git fetch. Isso obtém automaticamente uma lista atualizada de ramificações do controle remoto e configura ramificações remotas no repositório local, buscando também qualquer objeto de confirmação que esteja faltando.

No entanto, por padrão, git fetchnão remove ramificações remotas que não têm mais uma ramificação de contrapartida no controle remoto. Para fazer isso, você precisa explicitamente remover a lista de ramificações remotas:

git fetch --prune

Isso eliminará automaticamente as ramificações remotas que não existem mais no controle remoto. Depois, git branch -rmostrará uma lista atualizada dos ramos que realmente existem no controle remoto: E aqueles que você pode excluir usando git push.

Dito isto, para usar git push --delete, você precisa especificar o nome da ramificação no repositório remoto; não é o nome da sua filial remota. Então, para excluir o ramo test(representado pelo seu ramo remoto origin/test), você usaria git push origin --delete test.

cutucar
fonte
Também git branch -r | grep "origin"ajudará com grandes projetos que usam fork
Seraf
Portanto, existem duas razões para obter essa mensagem do git: ou a ramificação já foi excluída no servidor ou você prefixou incorretamente o nome da ramificação remotes/origin/. Ou ambos.
Andrew Spencer
136

O significado de remotes/origin/testé que você tem uma ramificação chamada testno servidor remoto origin. Então o comando seria

git push origin --delete test
drosam
fonte
25

Há um atalho para excluir a ramificação na origem:

git push origin :<branch_name>

O que é o mesmo que fazer git push origin --delete <branch_name>

Ricardo Magalhães
fonte
13
  1. obtenha a lista de ramificações remotas
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. você deve obter uma lista dos ramos remotos:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. agora, podemos excluir o ramo:
git push origin --delete deleteme
MovGP0
fonte
11

git push origin --delete yourBranch

Matheus Marsiglio
fonte
4

Como a ramificação remota é remota / origem / teste, você pode usar duas maneiras:

git push origin --delete test

e

git branch -D -r origin/test
Symeon Mattes
fonte
3

Eu segui a solução cutucando com um pequeno ajuste no final. Meus passos seguem
- git fetch --prune;
- git branch -aimprimindo o seguinte
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(ramificação remota para remover)
- git push origin --delete branch.
Aqui, o ramo a ser removido não é nomeado apenas como remotes/origin/branchsimples branch. E o ramo é removido.

Yanqi Huang
fonte
+1 para o comentário re: o nome do ramo, eu estava tentando excluir origin/branchquando deveria ser branch.
ken
1

git branch -a listará as ramificações no seu local e não as ramificações no seu controle remoto.

E o erro error: unable to delete 'remotes/origin/test': remote ref does not existsignifica que você não possui uma ramificação com esse nome no controle remoto, mas a ramificação existe no seu local.


fonte
isso é útil. resolveu meu problema de exclusão. eu estou querendo saber por que 'git empurrar --delete origem / test' não funcionou, enquanto "git push teste --delete" trabalhou
user10293779
1

Um one-liner útil para excluir ramificações que não sejam 'master' da origem:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Certifique-se de entender as implicações de executar isso antes de fazê-lo!

eddiewould
fonte
obrigado por este código! esse é o único código git que testei trabalhando para excluir todas as ramificações remotas, exceto a master.
Alvin
1

Para mim, isso funcionou $ ▶ git branch -D -r origin / mybranch

Detalhes

$ ▶ git branch -a | controles remotos grep mybranch / origin / mybranch

$ ▶ git branch -r | origem grep mybranch / mybranch

$ ▶ branch git develop * feature / pré-implantação

$ ▶ git push origin --delete mybranch error: incapaz de excluir 'mybranch': ref remoto não existe erro: falha ao enviar alguns refs para '[email protected]: config / myrepo.git'

$ ▶ ramificação git -D -r origem / mybranch Origem remota / mybranch excluída (era 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branch -r | grep mybranch

Buggy B
fonte
-1
git push origin --delete origin/test 

deve funcionar também

Sajal Choukse
fonte
2
Deve ser a origem do git push --delete test
Andreas Presthammer 27/17/17