“As atualizações foram rejeitadas porque a tag já existe” ao tentar empurrar SourceTree


119

Ao tentar enviar via árvore de origem, recebo o seguinte erro:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master 
Pushing to https://user@github.com/repo.git
To https://user@github.com/repo.git
 = [up to date]      master -> master
...
 ! [rejected]        example_tag -> example_tag (already exists)
updating local tracking ref 'refs/remotes/origin/master'
error: failed to push some refs to 'https://user@github.com/repo.git'
hint: Updates were rejected because the tag already exists in the remote.
Completed with errors, see above

Não fiz nenhuma alteração nesta tag até onde eu sei. Como posso consertar isso?

Respostas:


230

Você também deve ser capaz de resolver isso no git bash (clique no botão "Terminal" na IU da árvore de código-fonte). Tipo:

git pull --tags

3
Acho que essa é a melhor resposta, pois é o caminho de menor resistência.
Chade

40
Com um conflito, você pode git pull --tags -fsubstituir aquele que possui localmente, se quiser
DenLilleMand

2
Em SourceTree, clique em Buscar e habilite "buscar todas as tags". Isso bastaria.
darkgaze

118

Se você não fez nenhuma alteração local na tag que deseja manter, pode remover a tag que foi rejeitada porque já existe ( example_tagneste caso):

  1. Clique com o botão direito na tag e escolha excluí-la (certifique-se de desmarcar a caixa de seleção Remover tag de todos os controles remotos ).
  2. Escolha a opção Buscar (Buscar e armazenar todas as tags localmente não precisa ser habilitado).
  3. Agora você deve ter aquela tag que acabou de ser excluída de volta, e a tentativa de push não mostrará mais a mensagem de erro.

A razão isso é comum em SourceTree é porque a empurrar todas as tags opção é definida como on por padrão. (Outra maneira de ocultar esse erro é desmarcar essa opção.)


"Buscar e armazenar todas as tags localmente não precisa ser habilitado" é o que funcionou para mim, verificando que apenas fez com que o problema se repetisse.
Tom,

Supondo que o repositório upstream (origem) seja a fonte da verdade, essa solução é a menos destrutiva e corrige o problema instantaneamente.
Steve Henty,

Infelizmente, quando você tem 15 tags rejeitadas, as etapas 1,2 e 3 podem ser muito tediosas. Sim, desabilitar a opção "Enviar todas as tags" é provavelmente o caminho certo a seguir.
SagiSergeNadir

27

Desmarque push all tagsna parte inferior da IU ao confirmar seu git push


Você quis dizer push all tags?
Wodin,

Ótimo! Não observei. Obrigado
Meg-90

@Wodin, portanto, se você VERIFICAR o push all tagsna IU, ele tentará substituir as tags anteriores. mas você tem que DESMARCAR para evitar a substituição
JDev-Guns

@ JDev-Guns Eu estava apenas questionando o texto. Você disse originalmente push all TABs. Não estou familiarizado com SourceTree, mas suspeito que você quis dizer em TAGsvez de TABs.
Wodin de

@Wodin oh gotcha! Acho que disse, TAGsmas se não disse , eu quis dizerTABs
JDev-Guns

15

git pull --tagsfunciona muito bem, mas às vezes você pode obter um erro mesmo com este comando. Exemplo de mensagem de erro:

 ! [rejected]        example_tag      -> example_tag  (would clobber existing tag)

Isso pode ser resolvido com o comando: git pull --tags -f

Fonte:

https://github.com/concourse/git-resource/issues/233


14

Certifique-se de desmarcar o botão "Push all tags" enquanto pressiona.

insira a descrição da imagem aqui


Conforme mencionado acima, se você adicionou uma nova tag localmente, isso significa que ela não foi enviada para o remoto?
bytedev

0

Sim, de fato, puxe as marcas primeiro antes de você push --tags. Resolveu meu problema.


-1

Eu resolvo o problema no SourceTree desta forma:

  1. Excluir a tag com a seleção "Remover a tag de todos os controles remotos"
  2. Recriando a tag
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.