git push branch local com o mesmo nome da tag remota

110

Estou tentando enviar um novo branch local product-0.2para remoto, onde já existe uma tag com o mesmo nome (mas o branch em si não existe)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

Mesmo com:

git push origin product-0.2:/refs/heads/product-0.2 

Embora funcione o contrário, por exemplo, crie um branch product-0.1, faça um commit nele e depois aplique uma tag product-0.1.

Algumas pessoas contornam isso removendo a tag conflitante localmente, empurrando o branch e recuperando a tag remota, mas parece complicado e sujeito a erros.

Como posso criar meu branch com o mínimo de barulho?

Obrigado pela sua contribuição

youri
fonte
1
Tente refs/heads/product-0.2:refs/heads/product-0.2, ou seja, sem a barra inicial, e também forneça o refspec completo no lado local.
Knittl de
Pode tentar git push origin product-0.2: product-0.2
vpatil

Respostas:

162

O seguinte comando deve funcionar.

git push origin refs/heads/product-0.2:refs/heads/product-0.2 
Ralphtheninja
fonte
16
Resposta aceita, esta é a maneira de esclarecer a ambigüidade. Ainda assim, é muito mais fácil não ter tags e branches com o mesmo nome em primeiro lugar. Algumas ferramentas (por exemplo, SourceTree) irão tropeçar nele e você será deixado por conta própria, com a linha de comando como a única solução. Obrigado pessoal!
youri
2
+1. Algo semelhante funciona quando você precisa remover a ambigüidade de nomes remotos:refs/remotes/remote_name/remote_branch
Kelvin,
1
Inconscientemente, havia nomeado um lançamento marcado mastere não podia mais enviar para o branch com o mesmo nome. git push origin refs/heads/masterfiz o truque (então eu apaguei aquela tag para que parasse de acontecer).
tresf
Além das práticas recomendadas, você ainda não conseguiria enviar o branch para o qual está tentando enviar por push. Como podemos contornar isso?
Baksteen
Se a solução acima não funcionar, faça-o após remover o cabeçote remoto. git push origin --delete refs / heads / branchname
alones
42

Verifique quais tags estão associadas à sua filial:

git tag

No meu caso, eu tinha uma tag com o mesmo nome da filial. Eliminar funcionou:

git tag -d [tag-name]
ecairol
fonte
1
Funcionou bem, tinha uma tag com o mesmo nome do meu branch.
ChanceVI
20

Mude os nomes.

Quer você faça isso localmente ou remotamente, basta alterar os nomes.

Uma tag e um branch são fundamentalmente a mesma coisa no git: eles representam um ponteiro para um commit. A diferença é que um ponteiro de branch avança conforme você faz commits, enquanto uma tag permanece estática.

No entanto , você pode executar um git checkoutem uma ramificação ou tag. Por que você lutaria com todos esses nomes duplicados? Mude-os.

TheBuzzSaw
fonte
Deveria / poderia ter chamado a tag product-0.2.0com o último dígito para o 'nível de patch', mas ainda assim, tínhamos a convenção de nomenclatura em vigor e não tivemos problemas no passado quando o branch foi criado antes da tag.
youri
Se a equipe já começou a usar o branch, não seria difícil renomeá-lo?
svassr
Altere o nome da entidade que você ainda não enviou.
TheBuzzSaw
Tem certeza sobre este @TheBuzzSaw? Porque localmente posso ter os dois com o mesmo nome, como coisas diferentes.
John John Pichler
1
Embora o comando (como resposta selecionada) acima possa ter resolvido a questão - sendo novo no git, não entendi a questão nem a resposta. ESTA resposta fornece pelo menos a) conselhos eb) uma explicação - até mesmo uma recomendação para o futuro. Eu teria pensado em fazer minha própria pergunta, mas me canso de comentários como os já feitos antes - imho: uma pergunta que não é compreensível não é o mesmo que uma pergunta de iniciante. Mas isso é a vida;)
Michael Felt
15

Se você estiver tentando enviar uma tag com o mesmo nome de um branch:

git push origin tag myTag
Paulo Merson
fonte
3
muito bem senhor! esta deve ser a resposta aceita. sempre leia as respostas de SO de cauda longa
louis_guitton
É útil saber, mas não responde à pergunta de forma alguma. Não vou negar, já que o autor faz questão de enfatizar que é o contrário, mas dificilmente aceitável como resposta.
Peter Halverson de
12

Eu estava tentando enviar para um repositório canônico esta manhã e recebi o seguinte erro:

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

Isso aconteceu porque eu acidentalmente criei uma tag mestre localmente:

$ git tag
master
tag1
tag2
tag3
tag4

Depois de excluir esta tag localmente:

git tag -d master

Eu fui capaz de empurrar novamente.

Jasbeer Rawal
fonte
Boa explicação. É necessário excluir a tag local. Obrigado!
Chef Faraó
5

Isso falhou:

git push $origin $branch:$branch 

Enquanto isso funcionou para mim:

git checkout $branch
git push $origin HEAD:$branch
RzR
fonte
1

Se você estiver usando a árvore de origem, siga as etapas a seguir.

  1. encontre o nome da tag do branch na seção de tags
  2. clique em Nome da marca excluir marca.
  3. Certifique-se de marcar "remover tags do remoto" e clique em ok

Tente novamente para enviar suas alterações. agora isso vai funcionar.

Muhammad Bilal
fonte