tipos - ¿qué hace git log-oneline?
¿Las etiquetas de Git solo se aplican a la rama actual? (5)
Al llamar solo a la git tag <TAGNAME>
sin ningún parámetro adicional, Git creará una nueva etiqueta a partir de su HEAD actual (es decir, el HEAD de su rama actual). Al agregar confirmaciones adicionales en esta rama, la rama HEAD se mantendrá al día con las nuevas confirmaciones, mientras que la etiqueta siempre se refiere a la misma confirmación.
Cuando llame a la git tag <TAGNAME> <COMMIT>
puede incluso especificar qué compromiso usar para crear la etiqueta.
De todos modos, una etiqueta es simplemente un "puntero" para una determinada confirmación (no una rama).
Actualmente estoy trabajando con un repositorio que tiene múltiples ramas.
Cuando creo una etiqueta, ¿esa etiqueta se refiere a la rama actual?
En otras palabras: cada vez que creo una etiqueta, ¿necesito cambiar a la rama deseada y etiquetarla dentro de esa rama para que la etiqueta se refiera a esa rama en ese momento?
Las etiquetas y las ramas no tienen ninguna relación, ya que las etiquetas se refieren a una confirmación específica, y la rama es una referencia móvil a la última confirmación de una historia. Las ramas van, las etiquetas se quedan.
Por lo tanto, cuando etiqueta una confirmación, a git no le importa qué compromiso o rama está desprotegido, si le proporciona el SHA1 de lo que desea etiquetar.
Incluso puedo etiquetar al referirme a una rama (luego etiquetará la punta de la rama), y luego decir que la sugerencia de la rama está en otra parte (con git reset --hard
por ejemplo), o eliminar la rama. La etiqueta que creé sin embargo no se moverá.
Podemos crear una etiqueta para alguna confirmación pasada:
git tag nombre_de_tarea referencia de commit
Por ejemplo: git tag v1.0 5fcdb03
Si creas una etiqueta por ej.
git tag v1.0
la etiqueta se referirá a la confirmación más reciente de la sucursal en la que se encuentra actualmente. Puede cambiar la rama y crear una etiqueta allí.
También puede referirse a la otra rama durante el etiquetado,
git tag v1.0 name_of_other_branch
que creará la etiqueta a la confirmación más reciente de la otra rama.
O simplemente puede poner la etiqueta en cualquier lugar, sin importar qué rama, al hacer referencia directamente al SHA1 de alguna confirmación
git tag v1.0 <sha1>
La respuesta de CharlesB y la de Helmbert son útiles, pero me tomó un tiempo entenderlas. Aquí hay otra forma de expresarlo:
- Una etiqueta es un puntero a una confirmación , y las confirmaciones existen independientemente de las ramas .
- Es importante comprender que las etiquetas no tienen una relación directa con las ramas ; solo identifican una confirmación .
- Ese compromiso se puede señalar desde cualquier número de ramas, es decir, puede formar parte de la historia de cualquier cantidad de ramas, incluida ninguna.
- Por lo tanto, ejecutar
git show <tag>
para ver los detalles de una etiqueta no contiene ninguna referencia a ninguna rama, solo la ID de la confirmación a la que apunta la etiqueta.- (Los identificadores de confirmación (también conocidos como nombres de objeto o ID de SHA-1) son cadenas de 40 caracteres compuestas de dígitos hexadecimales que son hashes sobre el contenido de una confirmación, por ejemplo:
6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
)
- (Los identificadores de confirmación (también conocidos como nombres de objeto o ID de SHA-1) son cadenas de 40 caracteres compuestas de dígitos hexadecimales que son hashes sobre el contenido de una confirmación, por ejemplo:
- Es importante comprender que las etiquetas no tienen una relación directa con las ramas ; solo identifican una confirmación .
- Las ramas entran en juego solo de forma indirecta :
- En el momento de crear una etiqueta , al implicar la confirmación a la que apuntará la etiqueta :
- No especificar un objetivo para una etiqueta se establece de manera predeterminada en la confirmación más reciente de la rama actual (también conocido como HEAD); p.ej:
-
git tag v0.1.0 # tags HEAD of *current* branch
-
- Especificar un nombre de rama como el destino de la etiqueta se establece de manera predeterminada en la confirmación más reciente de esa rama; p.ej:
-
git tag v0.1.0 develop # tags HEAD of ''develop'' branch
-
- (Como otros han notado, también puede especificar una ID de confirmación explícitamente como el objetivo de la etiqueta).
- No especificar un objetivo para una etiqueta se establece de manera predeterminada en la confirmación más reciente de la rama actual (también conocido como HEAD); p.ej:
- Al usar
git describe
para describir la rama actual:-
git describe [--tags]
describe la rama actual en términos de commits desde la etiqueta más reciente [posiblemente ligera] en la historia de esta rama . - Por lo tanto, la etiqueta a la que hace referencia
git describe
NO puede reflejar la etiqueta creada más recientemente en general .
-
- En el momento de crear una etiqueta , al implicar la confirmación a la que apuntará la etiqueta :