I have a tag already pushed onto the remote. When another user creates the same tag and tries to push, the push will fail because the tag already exists on the remote.
Bu
Firstly, delete that tag you want to replace in remote:
git push origin --delete <tag-name>
then push your tag to remote:
git push --tags
This will force push all the tags and overwrite the existing ones.
git push -f --tags
In my case, remote was rejecting an force push when the tag already exists.
So, when the push was rejected, I did
git push --delete origin tagname
and pushed the new tag.
Please see Torek's comment to my question. There is a case when remote can reject the delete too.