Creé una etiqueta en la rama maestra llamada v0.1
así:
git tag -a v0.1
Pero luego me di cuenta de que todavía había algunos cambios que necesitaba fusionar en master para la versión 0.1, así que lo hice. Pero ahora mi v0.1
etiqueta está pegada (para invocar la analogía de la nota post-it) la confirmación incorrecta. Quiero que esté atascado en el commit más reciente en master, pero en cambio está atascado en el segundo commit más reciente en master.
¿Cómo puedo moverlo al commit más reciente en master?
git push origin :refs/tag/<tagname>
y luego hacergit tag -fa <tagname>
y luegogit push origin master --tags
. De lo contrario, podría terminar con cosas extrañas en la lista de referencias en el control remoto con caracteres ^ y {} añadidos. Gracias a Dan en codebasehq.com por señalar esto.:refs/tag/<tagname>
serlo:refs/tags/<tagname>
.git push -f origin <tagname>
Más precisamente, debe forzar la adición de la etiqueta, luego presionar con la opción --tags y -f:
fuente
Para resumir si se llama a su control remoto
origin
y está trabajando en unamaster
sucursal:También puede intercambiar la línea 4 para
git push origin --tags
empujar todos los cambios con etiquetas de sus cambios locales.Basándome en @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking respuestas, comentarios debajo de sus respuestas y comentarios NateS debajo de mi respuesta.
fuente
Elimínelo con
git tag -d <tagname>
y luego vuelva a crearlo en la confirmación correcta.fuente
Intento evitar algunas cosas cuando uso Git.
Uso del conocimiento de los elementos internos, por ejemplo, referencias / etiquetas. Intento usar únicamente los comandos Git documentados y evito usar cosas que requieren el conocimiento del contenido interno del directorio .git. (Es decir, trato a Git como un usuario de Git y no como un desarrollador de Git).
El uso de la fuerza cuando no se requiere.
Exagerar las cosas. (Empujando una rama y / o muchas etiquetas, para obtener una etiqueta donde la quiero).
Así que aquí está mi solución no violenta para cambiar una etiqueta, tanto local como remotamente, sin conocimiento de los aspectos internos de Git.
Lo uso cuando una solución de software finalmente tiene un problema y necesita ser actualizada / relanzada.
github
es un nombre remoto de muestra,fix123
es un nombre de etiqueta de muestra y790a621265
una confirmación de muestra.fuente
Dejaré aquí solo otra forma de este comando que se adapta a mis necesidades.
Había una etiqueta
v0.0.1.2
que quería mover.Y entonces:
fuente
Otra forma:
Mueva la etiqueta en el repositorio remoto (reemplace HEAD con cualquier otro si es necesario).
Fetch vuelve a cambiar.
fuente
Alias para mover una etiqueta a una confirmación diferente.
En su muestra, a medida comprometerse con e2ea1639 de hash hacer:
git tagm v0.1 e2ea1639
.Para etiquetas empujadas, use
git tagmp v0.1 e2ea1639
.Ambos alias te mantienen la fecha y el mensaje originales. Si lo usa
git tag -d
, perdió su mensaje original.Guárdalos en tu
.gitconfig
archivofuente
Si desea mover una etiqueta anotada, cambiando solo la confirmación dirigida pero conservando el mensaje de anotación y otro uso de metadatos:
uso: moveTag <tag-to-move> <target>
La función anterior se desarrolló haciendo referencia a teerapap / git-move-annotated-tag.sh .
fuente
git tag -f -a my_tag
ya conserva el mensaje de un mensaje anterior (con git versión 2.11.0).