youri
youri

Reputation: 3866

git push local branch with same name as remote tag

I'm trying to push a new local branch product-0.2 to remote where there is already a tag with the same name (but the branch itself does not exist)

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'

Same with:

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

Although the other way around it works, e.g. create a branch product-0.1, commit on it then apply a tag product-0.1.

Some people work around this by removing the conflicting tag locally, then push the branch, then retrieve the remote tag, but it seems cumbersome and error prone.

How can I create my branch with minimal fuss?

Thanks for your input

Upvotes: 169

Views: 135044

Answers (10)

havij
havij

Reputation: 1150

This could also happen if you have a tag and a branch with the same name and you try to push them without. Of course, GIT will be confused.

Upvotes: 1

Juan Andres Mercado
Juan Andres Mercado

Reputation: 41

Our team needed push the local branch to the repository with a TAG with the same name.

This happen because, ARGO needs deploy an moodle apps , and not support build the submodules directly, So another team created a TAG, when we really need a BRANCH.

Steps:

  1. pull repository from tag.
  2. git switch -c BRANCH
  3. git push --set-upstream origin BRANCH

Appear the error:

error: src refspec alt_v1.2.2 matches more than one error: failed to push some refs to 'https://gitlab.com/SOME_URL.git'

Solution:

  1. git tag -d alt_v1.2.2
  2. git push --set-upstream origin BRANCH

and problem solved !

Upvotes: 3

Muhammad Bilal
Muhammad Bilal

Reputation: 1152

If you are using source tree then follow the following steps.

  1. find the Tag name of branch in tags section
  2. click on Tag name delete tag.
  3. Make sure you check "remove tags from remote" and click ok

Try again to push your changes. now this will work.

Upvotes: 2

Paulo Merson
Paulo Merson

Reputation: 14457

If you're trying to push a tag that has the same name of a branch:

git push origin tag myTag

Upvotes: 55

TheBuzzSaw
TheBuzzSaw

Reputation: 8826

Change the names.

Whether you do it locally or remotely, just change the names.

A tag and a branch are fundamentally the same thing in git: they represent a pointer to a commit. The difference is that a branch pointer advances as you make commits, while a tag remains static.

However, you can perform a git checkout on either a branch or a tag. Why would you fight with all these doubled up names? Change them.

Upvotes: 25

Jasbeer Rawal
Jasbeer Rawal

Reputation: 286

I was trying to push to a canonical repository this morning and got the following error:

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

This happened because I had accidentally created a master tag locally:

$ git tag
master
tag1
tag2
tag3
tag4

Once I deleted this tag locally:

git tag -d master

I was able to push again.

Upvotes: 25

ecairol
ecairol

Reputation: 6553

Verify what tags are associated with your branch:

git tag

In my case, I had a tag with the same name of the branch. Deleting it worked:

git tag -d [tag-name]

Upvotes: 75

RzR
RzR

Reputation: 3176

This failed :

git push $origin $branch:$branch 

While this worked for me :

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

Upvotes: 9

ralphtheninja
ralphtheninja

Reputation: 132988

The following command should work.

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

Upvotes: 211

Related Questions