170

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?

2
  • 1
    Try refs/heads/product-0.2:refs/heads/product-0.2, i.e. without the leading slash, and also giving the full refspec on the local side. Commented Feb 21, 2012 at 14:22
  • Can try git push origin product-0.2:product-0.2 Commented Feb 21, 2012 at 14:48

10 Answers 10

211

The following command should work.

git push origin refs/heads/product-0.2:refs/heads/product-0.2 
Sign up to request clarification or add additional context in comments.

5 Comments

Accepted answer, this is the way to disambiguate. Still, it's way easier not to have tags and branches with the same name in the first place. Some tools (e.g. SourceTree) will stumble on it and you'll be left to your own devices, with the command line as the only solution. Thank you guys!
+1. A similar thing works when you need to disambiguate remote names: refs/remotes/remote_name/remote_branch
Had unknowingly named a tagged release master and could no longer push to the branch with the same name. git push origin refs/heads/master did the trick (then I deleted that tag so it'd stop happening).
Aside from best practices, you would still be unable to push branch you're trying to push to is the default branch.. How can we work around that?
If the above solution does not work, please do it after removing the remote head. git push origin --delete refs/heads/BRANCHNAME
78

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] 

2 Comments

Worked fine, had a tag with the same name as my branch.
I still get this: hint: Updates were rejected because the tag already exists in the remote.
55

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

git push origin tag myTag 

3 Comments

well done sir! this should be the accepted answer. always read the long tail SO answers
It's useful to know, but doesn't answer the question at all. I won't downvote it, since the author makes a point of emphasizing that it's the other way around, but hardly acceptable as the answer.
this should be accepting answer, I was looking for this command all my life
25

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.

3 Comments

Good explanation. Need to delete the local tag. Thanks!
if for some reason it matches more than one remote, you can delete the tag or head remote via: git push origin :refs/tags/tag1
I get this error: main -> refs/heads/main (already exists)
25

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.

5 Comments

Should/could have called the tag product-0.2.0 with the last digit for the 'patch level' but still, we had the naming convention in place and we didn't run into trouble in the past when the branch was created before the tag.
If the team already started to use the branch would'nt it be armfull to rename it ?
Change the name of the entity you have not yet pushed.
Are you sure about this @TheBuzzSaw? Because locally I can have both with same name, as different things.
While the command (as selected answer) above may have resolved the question - being new to git I understood neither the question nor the answer. THIS answer at least gives a) advice and b) an explanation - even recommendation for the future. I would have considered asking my own question, but I tire of comments such as already asked before - imho: a question that is not understandable is not the same as a beginner question. But that is life ;)
9

This failed :

git push $origin $branch:$branch 

While this worked for me :

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

1 Comment

ssh: Could not resolve hostname head: nodename nor servname provided, or not known
3

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 !

Comments

2

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.

Comments

1

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.

Comments

0

This is a bug. Impossible to browse a branch if a tag exists with the same name.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.