tipos tag remove log etiquetas git github tags

tag - Cambiar la fecha de la etiqueta git(o la versión GitHub basada en ella)



git remove tag (2)

ADVERTENCIA: Esto no conservará los mensajes de etiqueta para etiquetas anotadas.

Resumen

Para cada etiqueta que necesita ser cambiada:

  1. Retrocede en el tiempo hasta la confirmación que representa la etiqueta
  2. Eliminar la etiqueta (localmente y de forma remota)
    • Esto convertirá su "Release" en GitHub en un Borrador que luego puede eliminar.
  3. Vuelva a agregar la etiqueta con el mismo nombre mediante una invocación mágica que establece su fecha en la fecha de la confirmación.
  4. Empuje las nuevas etiquetas con fechas fijas hasta GitHub.
  5. Vaya a GitHub, elimine cualquier versión de borrador actual y vuelva a crear nuevas versiones de las nuevas etiquetas.

En codigo:

# Fixing tag named ''1.0.1'' git checkout 1.0.1 # Go to the associated commit git tag -d 1.0.1 # Locally delete the tag git push origin :refs/tags/1.0.1 # Push this deletion up to GitHub # Create the tag, with a date derived from the current head GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 1.0.1 -m"v1.0.1" git push --tags # Send the fixed tags to GitHub

Detalles

De acuerdo con Cómo etiquetar en Git :

Si olvida etiquetar un lanzamiento o un bache de versión, siempre puede etiquetarlo retroactivamente de la siguiente manera:

git checkout SHA1_OF_PAST_COMMIT git tag -m"Retroactively tagging version 1.5" v1.5

Y aunque es perfectamente utilizable, tiene el efecto de poner sus etiquetas fuera del orden cronológico, lo que puede afectar a los sistemas de compilación que buscan la etiqueta "más reciente". Pero no tengas miedo. Linus pensó en todo:

# This moves you to the point in history where the commit exists git checkout SHA1_OF_PAST_COMMIT # This command gives you the datetime of the commit you''re standing on git show --format=%aD | head -1 # And this temporarily sets git tag''s clock back to the date you copy/pasted in from above GIT_COMMITTER_DATE="Thu Nov 11 12:21:57 2010 -0800" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33" # Combining the two... GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"

Sin embargo, si ya ha agregado la etiqueta, no puede usar lo anterior con la git tag -f existingtag o de lo contrario, git se quejará cuando intente fusionar:

Rammy:docubot phrogz$ git push --tags To [email protected]:Phrogz/docubot.git ! [rejected] 1.0.1 -> 1.0.1 (already exists) error: failed to push some refs to ''[email protected]:Phrogz/docubot.git'' hint: Updates were rejected because the tag already exists in the remote.

En su lugar, debe eliminar la etiqueta localmente:

git tag -d 1.0.1

Presione esa eliminación de forma remota:

git push origin :refs/tags/1.0.1

En GitHub, vuelva a cargar Versiones: la publicación ahora se ha marcado como un "Borrador" y elimine el borrador.

Ahora, agregue la etiqueta con fecha anterior según las instrucciones anteriores y, finalmente, envíe la etiqueta resultante a GitHub:

git push --tags

y luego ve y vuelve a agregar la información de lanzamiento de GitHub.

Estoy agregando Releases a mis proyectos en GitHub agregando etiquetas a varios commits en la rama principal.

En uno de mis proyectos, no agregué las etiquetas a los commits en orden cronológico. (Encontré commits obvios y los etiqueté, y luego encontré commits menos obvios y anteriores y los etiqueté).

Ahora GitHub muestra v1.0.1 como actual, con v0.7.0 precediéndolo y v1.1.2 precediéndolo.

Parece que utiliza la fecha en la creación de una etiqueta como fecha de lanzamiento en lugar de la confirmación que se está etiquetando. ¿Cómo puedo editar mis etiquetas para que sus fechas coincidan con la confirmación que están etiquetando?


Aquí hay una línea basada en algunos de los comentarios en la otra respuesta:

git tag -l | while read -r tag ; do COMMIT_HASH=$(git rev-list -1 $tag) && GIT_COMMITTER_DATE="$(git show $COMMIT_HASH --format=%aD | head -1)" git tag -a -f $tag -m"$tag" $COMMIT_HASH ; done && git push --tags --force

ADVERTENCIA: ¡esto nukeará tus etiquetas de subida y no conservará los mensajes de las etiquetas anotadas! Asegúrate de saber lo que estás haciendo y, definitivamente, ¡no hagas esto para un repositorio público!

Para descomponerlo ...

# Loop over tags git tag -l | while read -r tag do # get the commit hash of the current tag COMMIT_HASH=$(git rev-list -1 $tag) # get the commit date of the tag and create a new tag using # the tag''s name and message. By specifying the environment # environment variable GIT_COMMITTER_DATE before this is # run, we override the default tag date. Note that if you # specify the variable on a different line, it will apply to # the current environment. This isn''t desired as probably # don''t want your future tags to also have that past date. # Of course, when you close your shell, the variable will no # longer persist. GIT_COMMITTER_DATE="$(git show $COMMIT_HASH --format=%aD | head -1)" git tag -a -f $tag -m"$tag" $COMMIT_HASH done # Force push tags and overwrite ones on the server with the same name git push --tags --force

Gracias a @Mr_and_Mrs_D por la sugerencia de usar un solo empuje.