git push branch locale con lo stesso nome del tag remoto


110

Sto cercando di inviare un nuovo ramo locale product-0.2a remoto dove è già presente un tag con lo stesso nome (ma il ramo stesso non esiste)

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'

Lo stesso con:

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

Anche se funziona il contrario, ad es. Creare un ramo product-0.1, eseguire il commit su di esso e applicare un tag product-0.1.

Alcune persone aggirano questo problema rimuovendo localmente il tag in conflitto, quindi spingono il ramo, quindi recuperano il tag remoto, ma sembra ingombrante e soggetto a errori.

Come posso creare il mio ramo con il minimo sforzo?

Grazie per il tuo contributo


1
Prova refs/heads/product-0.2:refs/heads/product-0.2, cioè senza la barra principale, e dando anche il refspec completo sul lato locale.
maglia

Può provare git push origin product-0.2: product-0.2
vpatil

Risposte:


162

Il seguente comando dovrebbe funzionare.

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

16
Risposta accettata, questo è il modo per chiarire le ambiguità. Tuttavia, è molto più semplice non avere tag e rami con lo stesso nome in primo luogo. Alcuni strumenti (ad esempio SourceTree) si imbatteranno in esso e sarai lasciato ai tuoi dispositivi, con la riga di comando come unica soluzione. Grazie ragazzi!
tuo

2
+1. Una cosa simile funziona quando è necessario disambiguare nomi remoti:refs/remotes/remote_name/remote_branch
Kelvin

1
Aveva inconsapevolmente chiamato una versione contrassegnata mastere non poteva più eseguire il push al ramo con lo stesso nome. git push origin refs/heads/masterha fatto il trucco (poi ho cancellato quel tag in modo che smettesse di succedere).
tresf

A parte le best practice, non saresti comunque in grado di eseguire il push del ramo a cui stai tentando di eseguire il push è il ramo predefinito .. Come possiamo aggirare questo problema?
Baksteen,

Se la soluzione di cui sopra non funziona, fallo dopo aver rimosso la testina remota. git push origin --delete refs / heads / BRANCHNAME
alones

42

Verifica quali tag sono associati al tuo ramo:

git tag

Nel mio caso, avevo un tag con lo stesso nome del ramo. L'eliminazione ha funzionato:

git tag -d [tag-name]

1
Ha funzionato bene, aveva un tag con lo stesso nome del mio ramo.
ChanceVI

20

Cambia i nomi.

Che tu lo faccia in locale o in remoto, cambia i nomi.

Un tag e un ramo sono fondamentalmente la stessa cosa in git: rappresentano un puntatore a un commit. La differenza è che un puntatore di ramo avanza mentre effettui i commit, mentre un tag rimane statico.

Tuttavia , puoi eseguire un git checkoutsu un ramo o un tag. Perché dovresti litigare con tutti questi nomi doppi? Cambiali.


Avrei dovuto / avrei potuto chiamare il tag product-0.2.0con l'ultima cifra per il "livello di patch", ma comunque, avevamo la convenzione di denominazione in atto e non abbiamo avuto problemi in passato quando il ramo è stato creato prima del tag.
tuo

Se il team avesse già iniziato a utilizzare il ramo, non sarebbe necessario rinominarlo?
svassr

Cambia il nome dell'entità che non hai ancora inviato.
TheBuzzSaw

Sei sicuro di questo @TheBuzzSaw? Perché localmente posso avere entrambi con lo stesso nome, come cose diverse.
John John Pichler

1
Sebbene il comando (come risposta selezionata) sopra possa aver risolto la domanda, essendo nuovo in git non ho capito né la domanda né la risposta. QUESTA risposta fornisce almeno a) un consiglio eb) una spiegazione - persino una raccomandazione per il futuro. Avrei considerato di fare la mia domanda, ma mi stanco di commenti come già fatto prima - imho: una domanda che non è comprensibile non è la stessa di una domanda per principianti. Ma questa è la vita;)
Michael Felt

15

Se stai tentando di eseguire il push di un tag che ha lo stesso nome di un ramo:

git push origin tag myTag

3
ben fatto signore! questa dovrebbe essere la risposta accettata. leggi sempre le risposte SO coda lunga
louis_guitton

È utile sapere, ma non risponde affatto alla domanda. Non lo sottovaluterò, poiché l'autore sottolinea che è il contrario, ma difficilmente accettabile come risposta.
Peter Halverson

12

Questa mattina stavo cercando di eseguire il push in un repository canonico e ho ricevuto il seguente errore:

$ 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'

Ciò è accaduto perché avevo creato accidentalmente un tag principale localmente:

$ git tag
master
tag1
tag2
tag3
tag4

Dopo aver eliminato questo tag localmente:

git tag -d master

Sono stato in grado di spingere di nuovo.


Buona spiegazione. È necessario eliminare il tag locale. Grazie!
Chef Pharaoh

5

Questo non è riuscito:

git push $origin $branch:$branch 

Mentre questo ha funzionato per me:

git checkout $branch
git push $origin HEAD:$branch

1

Se si utilizza l'albero dei sorgenti, seguire i passaggi seguenti.

  1. trova il nome del tag del ramo nella sezione dei tag
  2. fare clic su Nome tag elimina tag.
  3. Assicurati di selezionare "rimuovi tag dal telecomando" e fai clic su OK

Prova di nuovo a inviare le modifiche. ora questo funzionerà.

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.