When I hit the delete button in the Tags interface I can verify the tag does not show, but when semantic-release tries to run, I still git tag on the runner I still get

fatal: tag 'v5.2.3' already exists
    at makeError (/usr/local/lib/node_modules/semantic-release/node_modules/execa/lib/error.js:60:11)
    at handlePromise (/usr/local/lib/node_modules/semantic-release/node_modules/execa/index.js:118:26)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async tag (/usr/local/lib/node_modules/semantic-release/lib/git.js:224:3)
    at async run (/usr/local/lib/node_modules/semantic-release/index.js:191:5)
    at async module.exports (/usr/local/lib/node_modules/semantic-release/index.js:260:22)
    at async module.exports (/usr/local/lib/node_modules/semantic-release/cli.js:55:5) {
  shortMessage: 'Command failed with exit code 128: git tag v5.2.3 b49dff6c91a03a326e6afde67c32a5c788914c25',
  command: 'git tag v5.2.3 b49dff6c91a03a326e6afde67c32a5c788914c25',
  escapedCommand: 'git tag v5.2.3 b49dff6c91a03a326e6afde67c32a5c788914c25',
  exitCode: 128,
  signal: undefined,
  signalDescription: undefined,
  stdout: '',
  stderr: "fatal: tag 'v5.2.3' already exists",
  failed: true,
  timedOut: false,
  isCanceled: false,
  killed: false

What's going on here?

1 Answer 1


I'm not sure what GitLab is thinking here, but the Tags API and tags UI represent tags in the web interface, but they do not disruptively remove the tags from the underlying repo. This seems like a major but which I'll file later, or update this with a link to at a later point in time.

You can force the removal from the upstream repo which will also remove the tag from the UI using vanilla Git.

git push upstream :refs/tags/<tag to delete>

Like this

git push upstream :refs/tags/v5.2.3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.