Git Push Local Branch mit dem gleichen Namen wie Remote-Tag


110

Ich versuche, einen neuen lokalen Zweig product-0.2an Remote zu senden, wo bereits ein Tag mit demselben Namen vorhanden ist (der Zweig selbst existiert jedoch nicht).

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'

Das gleiche mit:

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

Obwohl es umgekehrt funktioniert, z. B. einen Zweig erstellen, einen product-0.1Commit ausführen und dann ein Tag anwenden product-0.1.

Einige Leute umgehen dies, indem sie das widersprüchliche Tag lokal entfernen, dann den Zweig verschieben und dann das Remote-Tag abrufen. Dies scheint jedoch umständlich und fehleranfällig zu sein.

Wie kann ich meine Filiale mit minimalem Aufwand erstellen?

Danke für deinen Beitrag


1
Versuchen Sie es refs/heads/product-0.2:refs/heads/product-0.2, dh ohne den führenden Schrägstrich, und geben Sie auch die vollständige Referenz auf der lokalen Seite an.
Knittl

Kann versuchen, Git Push Origin Produkt-0.2: Produkt-0.2
Vpatil

Antworten:


161

Der folgende Befehl sollte funktionieren.

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

16
Akzeptierte Antwort, dies ist der Weg zur Disambiguierung. Trotzdem ist es viel einfacher, überhaupt keine Tags und Zweige mit demselben Namen zu haben. Einige Tools (z. B. SourceTree) werden darauf stoßen und Sie werden Ihren eigenen Geräten überlassen, wobei die Befehlszeile die einzige Lösung ist. Danke Jungs!
Youri

2
+1. Ähnliches funktioniert, wenn Sie entfernte Namen eindeutig unterscheiden müssen:refs/remotes/remote_name/remote_branch
Kelvin

1
Hatte unwissentlich eine getaggte Version benannt masterund konnte nicht mehr auf den gleichnamigen Zweig pushen. git push origin refs/heads/masterhabe den Trick gemacht (dann habe ich das Tag gelöscht, damit es nicht mehr passiert).
Tresf

Abgesehen von den Best Practices können Sie den Zweig, auf den Sie pushen möchten, immer noch nicht als Standardzweig verschieben. Wie können wir das umgehen?
Baksteen

Wenn die oben genannte Lösung nicht funktioniert, tun Sie dies bitte, nachdem Sie den Remote-Kopf entfernt haben. Git Push Origin - Refs / Heads / BRANCHNAME löschen
allein

42

Überprüfen Sie, welche Tags Ihrem Zweig zugeordnet sind:

git tag

In meinem Fall hatte ich ein Tag mit dem gleichen Namen der Niederlassung. Das Löschen hat funktioniert:

git tag -d [tag-name]

1
Funktionierte gut, hatte ein Tag mit dem gleichen Namen wie meine Filiale.
ChanceVI

20

Ändern Sie die Namen.

Ob Sie es lokal oder remote tun, ändern Sie einfach die Namen.

Ein Tag und ein Zweig sind in git grundsätzlich dasselbe: Sie repräsentieren einen Zeiger auf ein Commit. Der Unterschied besteht darin, dass ein Verzweigungszeiger beim Festschreiben fortschreitet, während ein Tag statisch bleibt.

Allerdings können Sie eine ausführen git checkoutentweder auf einem Zweig oder einen Tag. Warum würdest du mit all diesen doppelten Namen kämpfen? Ändere sie.


Sollte / hätte das Tag product-0.2.0mit der letzten Ziffer für das 'Patch-Level' aufgerufen werden können , hatten wir dennoch die Namenskonvention und hatten in der Vergangenheit keine Probleme, als der Zweig vor dem Tag erstellt wurde.
Youri

Wenn das Team den Zweig bereits nutzen würde, wäre es dann nicht sinnvoll, ihn umzubenennen?
Svassr

Ändern Sie den Namen der Entität, die Sie noch nicht gepusht haben.
TheBuzzSaw

Bist du dir bei dieser @TheBuzzSaw sicher? Denn vor Ort kann ich beide mit dem gleichen Namen als verschiedene Dinge haben.
John John Pichler

1
Während der obige Befehl (als ausgewählte Antwort) die Frage möglicherweise gelöst hat - da ich neu bei git bin, habe ich weder die Frage noch die Antwort verstanden. Diese Antwort gibt zumindest a) Ratschläge und b) eine Erklärung - sogar eine Empfehlung für die Zukunft. Ich hätte überlegt, meine eigene Frage zu stellen, aber ich bin müde von Kommentaren, wie sie bereits zuvor gestellt wurden - imho: Eine Frage, die nicht verständlich ist, ist nicht dasselbe wie eine Anfängerfrage. Aber das ist das Leben;)
Michael Filz

15

Wenn Sie versuchen, ein Tag mit demselben Namen wie ein Zweig zu pushen :

git push origin tag myTag

3
Gut gemacht, Sir! Dies sollte die akzeptierte Antwort sein. Lesen Sie immer die Long Tail SO Antworten
Louis_guitton

Es ist nützlich zu wissen, beantwortet aber die Frage überhaupt nicht. Ich werde es nicht ablehnen, da der Autor betont, dass es umgekehrt ist, aber als Antwort kaum akzeptabel.
Peter Halverson

12

Ich habe heute Morgen versucht, in ein kanonisches Repository zu wechseln, und habe die folgende Fehlermeldung erhalten:

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

Dies geschah, weil ich versehentlich lokal ein Master-Tag erstellt hatte:

$ git tag
master
tag1
tag2
tag3
tag4

Sobald ich dieses Tag lokal gelöscht habe:

git tag -d master

Ich konnte wieder pushen.


Gute Erklärung. Das lokale Tag muss gelöscht werden. Vielen Dank!
Chef Pharao

5

Dies schlug fehl:

git push $origin $branch:$branch 

Während das für mich funktionierte:

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

1

Wenn Sie den Quellbaum verwenden, führen Sie die folgenden Schritte aus.

  1. Suchen Sie den Tag-Namen des Zweigs im Abschnitt Tags
  2. Klicken Sie auf Tag Name Tag löschen.
  3. Stellen Sie sicher, dass Sie "Tags von der Fernbedienung entfernen" aktivieren und auf "OK" klicken

Versuchen Sie erneut, Ihre Änderungen zu übernehmen. jetzt wird das funktionieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.