Ao excluir a ramificação remota do git "erro: não é possível enviar para o destino não qualificado"

139

Estou tentando excluir um ramo remoto do git com

git push origin :my_remote_branch

e obtendo:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to '[email protected]:/myrepo'

estes são meus ramos atuais

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

Qualquer idéia de como me livrar desse ramo seria apreciada.

Hugo
fonte
Você tentou git fetchver se ele corrigia esse nome remoto inexistente? Você tentou entrar .git\refs\remotes\origine excluir o my_remote_brancharquivo, para ver se isso é suficiente?
VonC
fez, git fetchmas isso não ajudou. Tentará procurar uma solução mais direta antes de tentar excluir o arquivo manualmente.
24412 Hugo
tente excluir ou pelo menos mover esse arquivo: ele contém apenas o SHA1 da ponta desse ramo.
VonC
45
Você deve fazer isso git fetch -ppara se livrar de ramos de rastreamento obsoletos.
Jan Hudec

Respostas:

270

O fato de refs/remotes/origin/my_remote_branchexistir no seu repositório local não implica que refs/heads/my_remote_branchexiste no originrepositório remoto.

Faça git fetch -p originpara refs/remotes/origin/my_remote_branchdesaparecer se já tiver sido excluído na origem. A -popção diz à busca para excluir quaisquer ramificações de rastreamento que não existem mais nos controles remotos correspondentes; por padrão, eles são mantidos por aí.

Jan Hudec
fonte
12
git fetch -p originconsertou para mim. Muito obrigado.
Redimp 07/04
1
Sua resposta é incrível. Curto e sobre a essência!
1nstinct 22/10
poda não ajudou! enquanto git push origin --delete origin/feature/xme deu erro sobre a inexistência ref git push origin :feature/xexcluiu o ramo. Então eu acho git push origin --delete <branchName>que não deve incluir a origem no branchName (?), Mas é completo, o que é confuso.
Dashesy
@ dashesy, você estava em uma situação diferente do que o solicitante original. Na pergunta original, o problema é que a ramificação remota foi excluída , provavelmente por outra pessoa; portanto, apenas o local precisou ser sincronizado. Enquanto você estiver excluindo o controle remoto. De fato, o comando deve ser git push origin --delete feature/x, porque você está dando o nome do ramo na origem e ele não possui esse prefixo (os dois formulários são sinônimos de qualquer maneira).
Jan Hudec 24/05
@JanHudec faz sentido. O Bash complete é inteligente ao usar :para não incluir, originmas é concluído como em origin/branch_namevez de simplesmente branch_nameao usar a --deletevariante.
Dashesy #
56

Pergunta encontrada limpando antigos ramos git remotos e isso fez o truque

git branch -r -d origin/my_remote_branch
Hugo
fonte
Eu estou tentando fazer exatamente isso há cerca de uma hora, muito obrigado!
sebkkom
Isso não exclui a ramificação remota. Se você for buscar o git, verá o ramo novamente. Apenas remova-o da sua lista local de ramificação remota.
Patrick Desjardins
2
O @PatrickDesjardins git push origin :my_remote_branchexclui exatamente a ramificação do controle remoto e a git branch -r -d origin/my_remote_branchremove da minha lista local de ramificações remotas #
Hugo Hugo
11

Encontrei isso ao tentar excluir uma ramificação remota que já havia sido excluída. Tudo o que era necessário era uma ameixa:

git remote prune origin
Mateus
fonte
4

Tente seguir duas opções para excluir ramificação remota à força

Opção 1

get push origin --delete <branchName>

opção 2

git fetch -p origin
git branch -r -d origin/<branchName>
Pawan Maheshwari
fonte
3
git branch -r -d origin/my_remote_branch

não foi suficiente para mim. Antes eu tinha que ir ao servidor e trabalhar diretamente com o diretório git (o que é perigoso e feio) para remover a ramificação:

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch
pevik
fonte
Não é apenas perigoso e feio, também está errado . Por um lado, esta pergunta é sobre como eliminar o ramo localmente quando ele tem sido excluído no remoto. E, por outro, excluir apenas uma ramificação do controle remoto git push origin :my_remote_branch. Cuidado com o cólon.
Jan Hudec
Você está certo, Jan, git push origin :my_remote_branché o caminho normal. Essa maneira feia e perigosa é quando isso não funciona (por exemplo, devido ao git mal configurado).
Pevik
1

Eu tenho o problema semelhante. Primeiro fui para essa discussão, mas não consegui resolver o problema até ver https://stackoverflow.com/a/32147743/4209849 .

que simplesmente adiciona uma dica sobre como distinguir origin/my-branch-namee my-branch-name.

Para ser específico, devo usar:

git push origin :my_remote_branch

ao invés de

git push origin :origin/my_remote_branch

Isso resolveu meu problema, pelo menos, espero que ajude os outros também.

Kangqiao Zhao
fonte
1

Para mim, o problema era que esse era o meu ramo padrão no github. Alterei a ramificação padrão e a operação de exclusão foi bem-sucedida.

Espero que ajude alguém

Vlad Pulichev
fonte
0

Com esse mesmo problema, editei meu ./.git/configarquivo manualmente para incluir:

[branch "branchName"]
remote = origin
merge = refs/heads/branchName

O que resultou em: error: src refspec branchName matches more than one.Isso eu corrigi executando $git tag -d branchName. Depois disso, fui capaz de empurrar o novo ramo para a montante.

Kaweesi Joseph
fonte
0

Isso funcionou para mim: criei a ramificação remota na interface do usuário do github e, em seguida, enviei minha ramificação local que tinha o mesmo nome. Experimente caso outras maneiras não funcionem. Outra maneira seria criar uma nova ramificação localmente e enviar uma ramificação vazia e, mais tarde, escolher seu commit e enviar novamente para o controle remoto.

Nutan
fonte