¿Cómo etiquetar una confirmación anterior en Git?

949

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 conocido y estable.

Entonces, ¿cómo agregar una etiqueta a un commit arbitrario y antiguo?

Hogsolo
fuente
Vine aquí buscando ayuda para eliminar una etiqueta antigua localmente y en un control remoto y finalmente encontré esto útil, tal vez también ayude a alguien más: gist.github.com/mobilemind/7883996
Aleksander Lidtke
1
Y no olvides ¿Cómo insertar una etiqueta en un repositorio remoto usando Git? porque Git no empujará una etiqueta sin hacer algo especial.
jww

Respuestas:

1511

Ejemplo:

git tag -a v1.2 9fceb02 -m "Message here"

¿Dónde 9fceb02está la parte inicial de la identificación de confirmación?

Luego puede empujar la etiqueta usando git push origin v1.2.

Puede hacer git logpara mostrar todos los ID 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 lo que se mostrará en una página de lanzamientos de GitHub, por ejemplo). Si desea que la etiqueta esté fechada con la fecha de confirmación, consulte otra respuesta .

dkinzer
fuente
45
También puede hacer esto en el menú del botón derecho en gitk, conveniente si así es como está encontrando el SHA1 de todos modos.
Cascabel
62
Omitir el -ay las -m "Message here"partes si no quieren añadir un mensaje:git tag v1.2 9fceb02
Devius
3
También puede usar la ID de confirmación completa.
j08lue
1
@devius ¿Cuál es la diferencia entre usar -ay -m. La página del manual parece decir que -aestá implícita cuando -mse usa.
John Strood el
77
git push --tags origin masterempujaría todas las etiquetas en la sucursal local a remota. Prefiere git push origin <tag_name>simplemente empujar la etiqueta creada. Consulte: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet
144

Solo 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"

# 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 tagcomando), no la fecha de la confirmación. La ayuda de Git tagtiene una sección "Sobre etiquetas de retroceso" que dice:

Si ha importado algunos cambios desde otro VCS y desea agregar etiquetas para las principales versiones 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 de gitweb.

Para establecer la fecha utilizada en futuros objetos de etiqueta, configure la variable de entorno GIT_COMMITTER_DATE(consulte la discusión posterior de los valores posibles; 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 el tiempo de la confirmación HEAD a través de:

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 a través de:

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 el commit dos veces, parece más fácil simplemente cambiar el HEAD a ese commit 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"
Phrogz
fuente
44
@ColonelPanic, tu deseo es mi comando! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas
Si usa Github para administrar lanzamientos y preocuparse por la fecha que se muestra en la página / etiquetas de su proyecto, ¡establecer GIT_COMMITTER_DATE es particularmente importante!
Lesley
2
@ColonelPanic Te di un voto a favor por el juego de palabras, y desearía poder darte un segundo por el código, pero una estrella de Github tendrá que hacerlo.
andyhasit
96

La forma más sencilla de hacer esto es:

git tag v1.0.0 f4ba1fc

con f4ba1fcser el comienzo del hash de la confirmación que desea etiquetar y v1.0.0ser la versión que desea etiquetar.

PatrickNLT
fuente
Perfecto gracias :).
Saleh Enam Shohag
36

OK , simplemente puedes hacer:

git tag -a <tag> <commit-hash>

Entonces, si desea agregar la etiqueta: 1.0.2 para confirmar e50f795, simplemente haga lo siguiente:

git tag -a 1.0.2 e50f795

También agrega un mensaje al final, usando -malgo como esto:

git tag -a 1.0.2 e50f795 -m "my message"

Después de todo, debe empujarlo hacia remote, para hacer eso, simplemente haga:

git push origin 1.0.2 

Si tiene muchas etiquetas que no desea mencionar una por una, simplemente haga lo siguiente:

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: crear etiqueta en un hash de confirmación

También puede dd la etiqueta en Hub o utilizando herramientas como SourceTree , para evitar los pasos anteriores, inicié sesión en mi Bitbucket en este caso y lo hice desde allí:

  1. Vaya a su sucursal y busque la confirmación a la que desea agregar la etiqueta y haga clic en ella:

encuentra tu commit en bitbucket

  1. En la página de confirmación , a la derecha, busque dónde dice No tagsy haga clic en el +icono:

encontrar donde dice Sin etiquetas

  1. En el cuadro de nombre de etiqueta, agregue su etiqueta:

agregar nombre de etiqueta

  1. Ahora verá que la etiqueta se ha creado correctamente:

ingrese la descripción de la imagen aquí

Alireza
fuente
11

Esta es una vieja pregunta, y las respuestas ya dieron todo el trabajo, pero también hay una nueva opción que se puede considerar.

Si está utilizando SourceTree para administrar sus repositorios git, puede hacer clic derecho en cualquier confirmación y agregarle una etiqueta. Con otro clic del mouse también puede enviar la etiqueta directamente a la rama en origen.

Stephan Bijzitter
fuente
6

Sobre la base de las respuestas de los demás, aquí hay una solución de una línea que establece la fecha de la etiqueta a cuando realmente sucedió, usa la etiqueta anotada y no requiere git checkout:

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

donde tagse establece en la cadena de etiqueta deseada y commiten el hash de confirmación.

stason
fuente
3

La respuesta de @Phrogz es genial, pero no funciona en Windows. A continuación, le mostramos cómo etiquetar una confirmación anterior con la fecha original de confirmación mediante Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
ccoxtn
fuente