git push local branch с тем же именем, что и удаленный тег


Я пытаюсь подтолкнуть новую локальную ветку 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.

некоторые люди обходят это, удаляя конфликтующий тег локально, затем нажимают ветку, а затем извлекают удаленный тег, но он кажется громоздким и подверженный ошибкам.

как я могу создать свою ветку с минимальной суетой?

Спасибо за Ваш вклад

6 75

6 ответов:

следующая команда должна работать.

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

проверьте, какие теги связаны с вашей веткой:

git tag

в моем случае, у меня был тег с тем же именем ветви. Удаление его работало:

git tag -d [tag-name]

изменить имена.

Если вы делаете это локально или удаленно, просто измените имена.

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

, вы сможете выполнить git checkout на ветке или теге. Зачем тебе драться со всеми этими раздвоенными именами? Изменение их.

Я пытался нажать на канонический репозиторий сегодня утром и получил следующую ошибку:

$ 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

я смог нажать снова.

это не удалось :

git push $origin $branch:$branch 

в то время как это работало для меня :

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

Если вы пытаетесь толкать tag который имеет то же имя ветви:

git push origin tag myTag