Skeeve
Skeeve

Reputation: 8262

How to get rid of "would clobber existing tag"

I'm using git in VSCodium and each time I try to pull git is complaining.

Looking into the log I see

> git pull --tags origin master
From https://github.com/MY/REPO
 * branch            master     -> FETCH_HEAD
 ! [rejected]        latest     -> latest  (would clobber existing tag)
   9428765..935da94  master     -> origin/master

Doing the command with --force helps until the next time.

It's unclear to me what's going wrong here. What happened and how can I resolve this issue?

I mean: Besides trashing my local repo and cloning again.

Upvotes: 628

Views: 274512

Answers (7)

BackInBlack
BackInBlack

Reputation: 109

If you still want to pull tags from origin, but don't want to be annoyed by messages that some tags are rejected, you can activate pruning for tags:

git config fetch.pruneTags true

Upvotes: 1

cmbuckley
cmbuckley

Reputation: 42547

If this is a regular occurrence where tags are deleted and recreated (for instance, the recommendation for GitHub Actions is to have a floating major version tag, and "latest" could be something tagged with actions-tagger), you can edit your .git/config to add the following refspec:

[remote "origin"]                                                                                                                                              
  url = https://github.com/org/repo                                                                                                                 
  fetch = +refs/heads/*:refs/remotes/origin/*                                                                                                                

  # extra refspec
  fetch = +refs/tags/*:refs/tags/*

Since tags are not namespaced per remote, you should understand the impact this could have, but it may make sense for certain use cases.

To explain why this is necessary, see the git-fetch documentation (emphasis mine):

Until Git version 2.20, and unlike when pushing with git-push, any updates to refs/tags/* would be accepted without + in the refspec (or --force). When fetching, we promiscuously considered all tag updates from a remote to be forced fetches. Since Git version 2.20, fetching to update refs/tags/* works the same way as when pushing. I.e. any updates will be rejected without + in the refspec (or --force).

Upvotes: 11

Chase DeAnda
Chase DeAnda

Reputation: 16441

Running

git fetch --tags
yarn cache clean

fixed the issue for me when the issue was coming from another symlinked library where I already fixed the issue.

Upvotes: 0

Hunter Tran
Hunter Tran

Reputation: 15395

You should update your local tags with remote tags:

git fetch --tags --force

Then pull again.

Reason

On remote, someone deletes a tag and creates a new one with the same name, then this will happen on your local

Upvotes: 1455

eckc
eckc

Reputation: 608

Edit: To be clear, the original question was related to a git issue. While it may not be obvious, yarn can also have git dependencies. So for the 0.1% of users that has this error while running yarn install, this is for you! If not, just use the accepted/top answers.


I got this error for a package while trying to run yarn install. The accepted answer was for the current repo and didn't work for me, but this worked:

rm -rf **/node_modules && yarn cache clean

I'd tried just removing node_modules before, guess cleaning yarn cache was what did it.

Upvotes: 16

zhuziyi
zhuziyi

Reputation: 875

The reason may be that you or other contributors deleted an original tag and recreated the same tag.

The solution:

git fetch --tags -f

Forced to refresh the local tag


When using the button to update the code in the editor, the default will first use git pull --tags origin master

Therefore, you can add this "git.pullTags": false in the configuration file settings.json of the Vscode

Upvotes: 51

Vlad274
Vlad274

Reputation: 6854

Since you say it's unclear what's going wrong, I assume you're not using that tag for anything and you just want to do your own work.

Turn off this setting:

enter image description here

Or add this "git.pullTags": false in the settings.json file`

Now you're all set.


Detailed explanation:

Tags are just references to specific commits (just like branch names). The main difference is that git (as far as I know) assumes tags will not change, where branches are expected to be updated.

So, the "error" is that you have in your local a tag called latest pointing to commit X - but the remote has a tag called latest pointing to commit Y. If you apply the change from the remote you will overwrite your local tag.

VSCode will pull all tags by default, thus you get the error.

There isn't anything wrong with having a "moving" tag like latest, that just isn't something VSCode takes into account (personal opinion).


Alternatively, you can avoid the issue by using the command line and manually entering the git pull command. Specifically, you need to omit --tags to skip this step of the process.

If you do this, your tags will not be updated - but I don't think is a concern here.

Upvotes: 168

Related Questions