"Gli aggiornamenti sono stati rifiutati perché il tag esiste già" quando si tenta di eseguire il push in SourceTree


117

Quando si tenta di eseguire il push tramite l'albero di origine, viene visualizzato il seguente errore:

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

Non ho apportato modifiche a questo tag per quanto ne so. Come posso risolvere questo problema?

Risposte:


229

Dovresti anche essere in grado di risolvere questo problema in git bash (fai clic sul pulsante "Terminale" nell'interfaccia utente dell'albero di origine). Genere:

git pull --tags

3
Penso che questa sia la risposta migliore perché è il percorso di minor resistenza.
Ciad

40
Con un conflitto puoi git pull --tags -fsovrascrivere quello che hai localmente se è quello che vuoi
DenLilleMand

2
In SourceTree, fai clic su Fetch e abilita "fetch all tags". Quello lo farebbe.
darkgaze

116

Se non hai apportato modifiche locali al tag che desideri mantenere, puoi rimuovere il tag che è stato rifiutato perché già esistente ( example_tagin questo caso):

  1. Fai clic con il pulsante destro del mouse sul tag e scegli di eliminarlo (assicurati di deselezionare la casella di controllo Rimuovi tag da tutti i telecomandi ).
  2. Scegli l' opzione Recupera ( non è necessario abilitare il recupero e l'archiviazione di tutti i tag in locale ).
  3. Ora dovresti avere quel tag che è stato appena cancellato e il tentativo di Push non mostrerà più quel messaggio di errore.

Il motivo per cui questo è comune in SourceTree è perché il push tutti i tag opzione è impostata su per impostazione predefinita. (Un altro modo per nascondere questo errore è deselezionare l'opzione.)


"Il recupero e l'archiviazione di tutti i tag in locale non deve essere abilitato" è ciò che ha fatto per me, controllando che il problema si ripetesse.
Tom

Supponendo che il repo a monte (origine) sia la fonte della verità, questa soluzione è la meno distruttiva e risolve il problema all'istante.
Steve Henty,

Sfortunatamente quando hai 15 tag rifiutati, i passaggi 1,2 e 3 possono essere molto noiosi. Sì, disabilitare l'opzione "Spingi tutti i tag" è probabilmente la strada giusta da percorrere.
SagiSergeNadir

27

Deseleziona push all tagsnella parte inferiore dell'interfaccia utente quando confermi il tuo git push


Volevi dire push all tags?
Wodin

Grande! Non l'ho osservato. Grazie
Meg-90

@ Wodin quindi se CONTROLLA push all tagsnell'interfaccia utente proverà a sovrascrivere i tag precedenti. ma devi deselezionarlo per evitare la sovrascrittura
JDev-Guns

@ JDev-Guns stavo solo interrogando il testo. Inizialmente hai detto push all TABs. Non ho familiarità con SourceTree, ma sospettavo che intendessi TAGsinvece di TABs.
Wodin

@ Wodin oh gotcha! Penso di aver detto, TAGsma se non l' TABs
avessi fatto, volevo

15

git pull --tagsfunziona molto bene ma a volte puoi ottenere un errore anche con questo comando. Esempio di messaggio di errore:

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

Questo può essere risolto con il comando: git pull --tags -f

Fonte:

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


14

Assicurati di deselezionare il pulsante "Spingi tutti i tag" mentre premi.

inserisci qui la descrizione dell'immagine


Come accennato in precedenza, se hai aggiunto un nuovo tag localmente non significa che non è stato inviato al telecomando?
bytedev

0

Sì, in effetti, trascina i tag prima di te push --tags. Ho risolto il mio problema.


-1

Risolvo il problema su SourceTree in questo modo:

  1. Eliminazione del tag con la selezione "Rimuovi il tag da tutti i telecomandi"
  2. Ricreare il tag
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.