Pushing a branch to Bitbucket fails with the error, "refspec matches more than one".

Still need help?

The Atlassian Community is here for you.

Ask the community

Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

The error "refspec matches more than one" is shown while pushing a branch to Bitbucket.

This occurs because there is more than one Git ref that matches the ref name specified in the push command.

Example

Suppose a repo has a branch and a tag with the same name, "dev".

When an attempt is made to push the "dev" branch to the remote, the error "refspec matches more than one" will be shown and the push fails.

Case 1: Local refs

If the branch and the tag are on the local copy of the repo, the push will show the error:

git push origin dev

error: src refspec dev matches more than one
error: failed to push some refs to 'ssh://bitbucket.myhost.com:7999/proj1/repo-test.git'
  • "src" indicates that the ref name "dev" matches more than one ref in the local copy (source)

Case 2: Remote refs

If the branch and the tag are on the remote, the push will show the following error:

git push origin dev:dev

error: dst refspec dev matches more than one
error: failed to push some refs to 'ssh://bitbucket.myhost.com:7999/proj1/repo-test.git'
  • "dst" indicates that the ref specification "dev" matches more than one ref in the remote (destination)

Solution

Case 1: Local refs

First, check for branches and tags that have the same ref name on the local copy of the repo.

For example, to check for a branch with the name "dev":

git branch | grep "dev"

To check for a tag with the name "dev":

git tag | grep "dev"


If a local tag is found that has the same ref name as the branch being pushed, the tag can be deleted with the following command:

git tag -d dev

Afterwards, retry pushing the branch.

Case 2: Remote refs

Similar to the first case, check for branches and tags that have the same ref name on the remote.

For example, to check for a branch on the remote with the name "dev":

git ls-remote --heads | grep "dev"

To check for a tag on the remote with the name "dev":

git ls-remote --tags | grep "dev"


If a remote tag is found that has the same ref name as the branch, the tag on the remote can be deleted with:

git push --delete origin refs/tags/dev

Alternatively, the tag can be deleted through the Bitbucket UI with these procedures:

  1. Go to the repo's "Commits" page
  2. Look for the tag
  3. Click the commit hash associated with the tag 
  4. Delete the tag


Afterwards, retry pushing the branch.


Last modified on Jul 19, 2022

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.