“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://[email protected]/repo.git
To https://[email protected]/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://[email protected]/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?

Sensível
fonte

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
bytedev
fonte
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.)

Sensível
fonte
"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

JDev-Guns
fonte
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

Ogglas
fonte
14

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

insira a descrição da imagem aqui

Sudheer Kumar Palchuri
fonte
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.

YoungJeXu
fonte
-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
Marco Barbero
fonte