git push локальне відділення з такою ж назвою, як віддалений тег


110

Я намагаюся підштовхнути нову локальну гілку product-0.2до віддаленої, де вже є тег з такою ж назвою (але сама гілка не існує)

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'

Те саме:

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

Хоча навпаки це працює, наприклад, створити гілку product-0.1, виконайте її, тоді застосуйте тег product-0.1.

Деякі люди вирішують це, видаляючи конфліктуючий тег локально, потім натискають гілку, потім витягують віддалений тег, але це здається громіздким і схильним до помилок.

Як я можу створити свою гілку з мінімальною суєтою?

Дякуємо за ваш внесок


1
Спробуйте refs/heads/product-0.2:refs/heads/product-0.2, тобто без провідної косої риски, а також дайте повну ретроспективу на місцевій стороні.
knittl

Можна спробувати продукт git push origin-0.2: product-0.2
vpatil

Відповіді:


162

Наступна команда повинна працювати.

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

16
Отримавши відповідь, це спосіб роз’єднати. Але все-таки простіше не мати в першу чергу тегів та гілок з такою ж назвою. Деякі інструменти (наприклад, SourceTree) натрапляють на нього, і ви залишитесь на власні пристрої, командний рядок як єдине рішення. Дякую, хлопці!
youri

2
+1. Аналогічна річ працює, коли вам потрібно розмежувати віддалені імена:refs/remotes/remote_name/remote_branch
Келвін

1
Невідомо назвав тег випуску masterі більше не міг підштовхнути до гілки з такою ж назвою. git push origin refs/heads/masterзробив трюк (тоді я видалив цей тег, щоб він припинився).
tresf

Окрім передового досвіду, ви все ще не зможете просунути гілку, до якої ви намагаєтесь натиснути, - це гілка за замовчуванням.
Бакстін

Якщо вищевказане рішення не працює, будь ласка, зробіть це після зняття віддаленої головки. git push origin - видалити реф. / голови / BRANCHNAME
алони

42

Перевірте, які теги пов’язані з вашою філією:

git tag

У моєму випадку у мене був тег з такою ж назвою гілки. Видалення його спрацювало:

git tag -d [tag-name]

1
Працював чудово, мав тег з такою ж назвою, що і моя філія.
ШансVI

20

Змініть назви.

Незалежно від того, чи будете ви це робити локально чи віддалено, просто змініть назви.

Тег і гілка - це принципово одне і те ж саме в git: вони являють собою покажчик на коміт. Різниця полягає в тому, що вказівник гілки просувається під час здійснення фіксацій, тоді як тег залишається статичним.

Однак ви можете виконати git checkoutна гілці або тезі. Чому б ти бився з усіма цими подвоєними іменами? Змініть їх.


Якщо / міг би назвати тег product-0.2.0з останньою цифрою для "рівня виправлення", але все-таки у нас була умова іменування, і ми не стикалися з проблемою в минулому, коли гілка була створена перед тегом.
ти

Якби команда вже почала використовувати гілку, чи не вдалося б її перейменувати?
svassr

Змініть назву організації, яку ви ще не натиснули.
TheBuzzSaw

Ви впевнені в цьому @TheBuzzSaw? Тому що локально я можу мати як однакову назву, так і різні речі.
Джон Джон Піхлер

1
Незважаючи на те, що команда (як обрана відповідь) вище, можливо, вирішила це питання - будучи новим у гті, я не зрозумів ані питання, ані відповіді. ЦІЙ відповідь принаймні дає а) пораду та б) пояснення - навіть рекомендацію на майбутнє. Я б подумав задати своє власне запитання, але я втомився від коментарів, таких як уже задавались раніше - imho: питання, яке не зрозуміле, не те саме, що для початківців. Але це життя;)
Майкл Фетр

15

Якщо ви намагаєтесь натиснути тег із такою ж назвою гілки:

git push origin tag myTag

3
молодець сер! це має бути прийнятою відповіддю. завжди читайте відповіді на довгий хвіст
louis_guitton

Це корисно знати, але зовсім не відповідає на питання. Я не спростовую цього, оскільки автор наголошує, що це навпаки, але навряд чи прийнятний як відповідь.
Пітер Халверсон

12

Я намагався перейти до канонічного сховища сьогодні вранці і отримав таку помилку:

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

Це сталося тому, що я випадково створив головний тег локально:

$ git tag
master
tag1
tag2
tag3
tag4

Після локального видалення цього тегу:

git tag -d master

Мені вдалося знову натиснути.


Гарне пояснення. Потрібно видалити локальний тег. Дякую!
Фараон шеф-кухаря

5

Це не вдалося:

git push $origin $branch:$branch 

Поки це для мене працювало:

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

1

Якщо ви використовуєте вихідне дерево, то виконайте наступні кроки.

  1. знайдіть назву гілки тегу в розділі тегів
  2. натисніть на тег видалення імені тегу.
  3. Переконайтесь, що ви поставили прапорець "видалити теги з віддаленого" та натисніть кнопку ОК

Спробуйте знову натиснути зміни. тепер це спрацює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.