Cómo solucionar “would clobber existing tag” en Git.
Git muestra “would clobber existing tag” cuando un fetch sustituiría una etiqueta local existente por un objeto distinto. Compara ambas referencias de etiqueta, conserva la referencia local y actualiza solo esa etiqueta si la versión remota es la correcta.
La respuesta segura
Localiza la etiqueta indicada en el error. Compara los ID de objeto locales y remotos, crea una copia de seguridad local y fuerza el fetch solo de esa etiqueta verificada si la versión remota es correcta. No fuerces todas las etiquetas ni envíes un reemplazo al remoto.
Las etiquetas anotadas tienen sus propios ID de objeto. Dos objetos de etiqueta pueden apuntar al mismo commit y diferir en el mensaje o la firma; compara las referencias de etiqueta y sus destinos resueltos antes de decidir qué cambió.
1. Inspecciona la etiqueta exacta
Sustituye v1.2.3 por la etiqueta indicada en el error y origin por tu remoto. Estos comandos no cambian referencias.
git show-ref --verify refs/tags/v1.2.3
git rev-parse 'refs/tags/v1.2.3^{}'
git ls-remote --tags origin 'refs/tags/v1.2.3' 'refs/tags/v1.2.3^{}'El primer comando muestra el ID del objeto de etiqueta local. El segundo atraviesa una etiqueta anotada hasta su objeto de destino. La salida remota muestra la referencia de etiqueta y, para una etiqueta anotada, una línea terminada en ^{} con su destino resuelto.
Usa los nombres de referencia completos que aparecen aquí: una búsqueda por el prefijo v1.2.3 también podría incluir v1.2.30. Si el remoto no tiene una etiqueta coincidente, detente; este procedimiento no justifica eliminar la etiqueta local.
2. Conserva la referencia local original
Crea una etiqueta local de recuperación antes de sustituir nada. El último argumento vacío exige que el nombre de la copia de seguridad no esté en uso.
git update-ref refs/tags/backup/v1.2.3 refs/tags/v1.2.3 ""
git rev-parse refs/tags/v1.2.3 refs/tags/backup/v1.2.3Ambos ID de objeto deben coincidir. Así se conserva el objeto de etiqueta original, incluidos el mensaje y la firma de una etiqueta anotada. Si la creación falla porque la copia ya existe, elige un nombre nuevo y verifícalo antes de continuar.
Conserva la copia hasta resolver la discrepancia. Permanecerá local salvo que la envíes; no uses git push --tags para esta reparación.
3. Actualiza solo la etiqueta verificada
Ejecuta este paso únicamente después de confirmar que la etiqueta remota es la correcta y que la copia existe. El + inicial autoriza la sustitución de esta referencia local concreta.
git fetch --no-tags --no-prune --no-prune-tags origin '+refs/tags/v1.2.3:refs/tags/v1.2.3'
git show-ref --verify refs/tags/v1.2.3
git rev-parse 'refs/tags/v1.2.3^{}'--no-tags desactiva el seguimiento automático de otras etiquetas. --no-prune y --no-prune-tags desactivan para este fetch la poda normal y la poda de etiquetas configurada, de modo que la reparación no se amplíe. No se envía ni sustituye ninguna rama o etiqueta remota.
Comprueba el objeto de etiqueta obtenido y su destino resuelto frente a los ID remotos que inspeccionaste. Si el remoto cambia durante la reparación, detente e investiga antes de usar la etiqueta para una versión. La copia sigue apuntando a tu objeto original.
Por qué Git rechaza la actualización
Desde Git 2.20, fetch exige un force explícito para sustituir una referencia refs/tags/* existente. Esta regla se aplica aunque los dos destinos estén relacionados por el historial de commits; las etiquetas no se actualizan con las reglas de fast-forward de las ramas.
Si tu etiqueta local es la correcta para la versión, consérvala y coordínate con quien mantiene el proyecto. Sustituir una etiqueta remota publicada cambia lo que otros usuarios reciben bajo el mismo nombre de versión.
Referencias oficiales de Git
Inspecciona primero y cambia después la referencia más pequeña posible.
FluxGit reúne etiquetas, higiene del repositorio y operaciones protegidas en un cliente Git de escritorio para macOS, Windows y Linux. Usa los comandos anteriores para diagnosticar este error de Git antes de cambiar una referencia.