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

youri
quelle
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 
ralphtheninja
quelle
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]
Ecairol
quelle
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.

TheBuzzSaw
quelle
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
Paulo Merson
quelle
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.

Jasbeer Rawal
quelle
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
RzR
quelle
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.

Muhammad Bilal
quelle