2012-02-21 12 views
68

próbuję naciskać nowego lokalnego oddziału product-0.2 na pilocie, gdzie istnieje już tag o tej samej nazwie (ale sama gałąź nie istnieje)git pchania lokalnym oddziałem o takiej samej nazwie jak zdalny tag

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' 

samo z:

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

Chociaż na odwrót to działa, np utwórz gałąź product-0.1, zatwierdz ją, a następnie zastosuj tag product-0.1.

Niektórzy pracują nad tym, usuwając lokalny tag powodujący konflikt, a następnie naciskają gałąź, a następnie pobierają zdalny znacznik, ale wydaje się on nieporęczny i podatny na błędy.

Jak mogę utworzyć swoją gałąź przy minimalnym zamieszaniu?

Dziękujemy za dane wejściowe

+1

Wypróbuj 'refs/heads/product-0.2: refs/heads/product-0.2', tzn. Bez wiodącego ukośnika, a także dając pełny refspec po stronie lokalnej. – knittl

+0

Może wypróbować git push origin product-0.2: product-0.2 – vpatil

Odpowiedz

103

Następujące polecenie powinno działać.

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

Przyjęta odpowiedź, to jest sposób na ujednoznacznienie. Mimo to łatwiej jest nie mieć tagów i gałęzi o tej samej nazwie. Niektóre narzędzia (np. SourceTree) natkną się na niego i pozostaniesz na własnych urządzeniach, z wiersza poleceń jako jedynym rozwiązaniem. Dzięki chłopaki! – youri

+0

Det var sa lite sa :) – ralphtheninja

+1

+1.Podobna rzecz działa, gdy trzeba ujednoznacznić zdalne nazwy: 'refs/remote/remote_name/remote_branch' – Kelvin

13

Zmień nazwy. Niezależnie od tego, czy robisz to lokalnie, czy zdalnie, po prostu zmieniaj nazwy. Znacznik i gałąź to zasadniczo to samo w git: stanowią wskaźnik do zatwierdzenia. Różnica polega na tym, że wskaźnik gałęzi rozwija się w miarę dokonywania zatwierdzeń, a znacznik pozostaje statyczny. Można jednak wykonać numer git checkout na gałęzi lub znaczniku. Dlaczego miałbyś walczyć z tymi wszystkimi podwójnymi nazwiskami? Zmienić je.

+0

Powinien/mógłbym nazwać tag 'product-0.2.0' z ostatnią cyfrą dla 'poziomu łaty', ale wciąż mieliśmy konwencję nazewnictwa i nie napotkaliśmy problemów w przeszłości, kiedy oddział był utworzone przed tagiem. – youri

+0

Jeśli zespół już zaczął korzystać z oddziału, czy zmiana nazwy nie byłaby zbrojna? – svassr

+0

Zmień nazwę encji, której jeszcze nie pchnąłeś. – TheBuzzSaw

1

ta nie powiodła się:

git push $origin $branch:$branch 

Mimo to pracował dla mnie:

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

Sprawdź co znaczniki są związane z oddziału:

git tag 

W moim przypadku, miałem tag o tej samej nazwie oddziału. Usuwanie to działało:

git tag -d [tag-name] 
3

starałem się pchnąć do kanonicznej repozytorium rano i uzyskałem następujący błąd:

$ git push origin master 
error: src refspec master matches more than one. 
error: failed to push some refs to 'ssh://[email protected]/srv/git/repo' 

Stało się to dlatego, że przypadkowo stworzył tag głównego lokalnie:

$ git tag 
master 
tag1 
tag2 
tag3 
tag4 

Po Usunąłem ten tag lokalnie:

git tag -d master 

Udało mi się ponownie naciskać.

+0

Dobre wyjaśnienie. Musisz usunąć lokalny znacznik. Dzięki! –

Powiązane problemy