141 votes

git push branche locale avec le même nom que le tag distant

J'essaie de pousser une nouvelle branche locale product-0.2 à distance où il y a déjà une balise avec le même nom (mais la branche elle-même n'existe pas)

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'

Même chose pour :

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

Bien que dans l'autre sens, cela fonctionne, par exemple en créant une branche product-0.1 , faites un commit sur celui-ci puis appliquez un tag product-0.1 .

Certaines personnes contournent ce problème en supprimant la balise en conflit localement, puis en poussant la branche, puis en récupérant la balise distante, mais cela semble lourd et source d'erreurs.

Comment puis-je créer ma branche avec un minimum d'efforts ?

Merci pour votre contribution

187voto

ralphtheninja Points 24346

La commande suivante devrait fonctionner.

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

60voto

ecairol Points 211

Vérifiez quels tags sont associés à votre branche :

git tag

Dans mon cas, j'avais un tag avec le même nom que la branche. La supprimer a fonctionné :

git tag -d [tag-name]

29voto

Paulo Merson Points 611

Si vous essayez de pousser un étiquette qui a le même nom qu'une branche :

git push origin tag myTag

24voto

TheBuzzSaw Points 4896

Changez les noms.

Que vous le fassiez localement ou à distance, il suffit de changer les noms.

Un tag et une branche sont fondamentalement la même chose dans git : ils représentent un pointeur vers un commit. La différence est qu'un pointeur de branche avance au fur et à mesure que vous faites des commits, alors qu'un tag reste statique.

Cependant vous pouvez effectuer une git checkout sur une branche ou une étiquette. Pourquoi vous battre avec tous ces noms dédoublés ? Changez-les.

23voto

Jasbeer Rawal Points 116

J'ai essayé de pousser vers un dépôt canonique ce matin et j'ai obtenu l'erreur suivante :

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

Cela s'est produit parce que j'avais accidentellement créé une balise maître localement :

$ git tag
master
tag1
tag2
tag3
tag4

Une fois que j'ai supprimé cette étiquette localement :

git tag -d master

J'étais capable de pousser à nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X