¿Cómo etiquetar una confirmación anterior en Git?
Somos nuevos en Git y quiero establecer una etiqueta al comienzo de nuestro repositorio. Nuestro código de producción es el mismo que el del repositorio inicial, pero hemos realizado confirmaciones desde entonces. Una etiqueta al principio nos permitiría "revertir" la producción a un estado estable conocido.
Entonces, ¿cómo agregar una etiqueta a una confirmación anterior y arbitraria?
Ejemplo:
git tag -a v1.2 9fceb02 -m "Message here"
¿ Dónde 9fceb02
está la parte inicial de la identificación de confirmación?
Luego puedes empujar la etiqueta usando git push origin v1.2
.
Puede hacerlo git log
para mostrar todas las identificaciones de confirmación en su rama actual.
También hay un buen capítulo sobre etiquetado en el libro Pro Git.
Advertencia: esto crea etiquetas con la fecha actual (y ese valor es el que se mostrará en una página de lanzamientos de GitHub, por ejemplo). Si desea que la etiqueta tenga la fecha de confirmación, consulte otra respuesta .
Sólo el código
# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02
# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"
# push to origin
git push origin --tags
# set HEAD back to whatever you want it to be
git checkout master
Detalles
La respuesta de @dkinzer crea etiquetas cuya fecha es la fecha actual (cuando ejecutó el git tag
comando), no la fecha de la confirmación. La ayuda de Git tag
tiene una sección "Sobre etiquetas retroactivas" que dice:
Si ha importado algunos cambios de otro VCS y desea agregar etiquetas para las versiones principales de su trabajo, es útil poder especificar la fecha para incrustar dentro del objeto de etiqueta; Dichos datos en el objeto de etiqueta afectan, por ejemplo, el orden de las etiquetas en la interfaz gitweb.
Para establecer la fecha utilizada en futuros objetos de etiqueta, establezca la variable de entorno
GIT_COMMITTER_DATE
(consulte la discusión posterior sobre posibles valores; la forma más común es "AAAA-MM-DD HH:MM").Por ejemplo:
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1
La página "Cómo etiquetar en Git" nos muestra que podemos extraer la hora del compromiso HEAD mediante:
git show --format=%aD | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700
Podríamos extraer la fecha de una confirmación específica mediante:
GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"
Sin embargo, en lugar de repetir la confirmación dos veces, parece más fácil simplemente cambiar el HEAD de esa confirmación y usarlo implícitamente en ambos comandos:
git checkout 9fceb02
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
La forma más sencilla de hacer esto es:
git tag v1.0.0 f4ba1fc
git push origin --tags
siendo f4ba1fc
el comienzo del hash del commit que deseas etiquetar y v1.0.0
siendo la versión que deseas etiquetar.
OK , simplemente puedes hacer:
git tag -a <tag> <commit-hash>
Entonces, si desea agregar la etiqueta: 1.0.2 para confirmar e50f795
, simplemente haga:
git tag -a 1.0.2 e50f795
También agregas un mensaje al final, usando -m
algo como esto:
git tag -a 1.0.2 e50f795 -m "my message"
Después de todo, necesitas empujarlo al remote
, para hacer eso, simplemente haz:
git push origin 1.0.2
Si tiene muchas etiquetas que no desea mencionar una por una, simplemente haga:
git push origin --tags
para juntar todas las etiquetas...
Además, creé los pasos en la imagen a continuación, para obtener más aclaraciones sobre los pasos:
También puedes agregar la etiqueta en Hub o usar herramientas como SourceTree . Para evitar los pasos anteriores, en este caso inicié sesión en mi Bitbucket y lo hice desde allí:
- Vaya a su sucursal y busque el compromiso al que desea agregar la etiqueta y haga clic en él:
- En la página de confirmación , a la derecha, busque donde dice
No tags
y haga clic en el+
icono:
- En el cuadro de nombre de la etiqueta, agregue su etiqueta:
- Ahora verá que la etiqueta se ha creado correctamente: