usar tener tag repositorio qué proyecto podemos partir para otro oneline nuevo nuestros mayor log herramienta hacer hace eliminar crear control git git-checkout git-tag

tener - ¿qué hace git log-oneline?



¿Qué es la etiqueta git, cómo crear etiquetas y cómo retirar las etiquetas remotas git? (3)

cuando pago la etiqueta remota de git, use un comando como este:

git checkout -b local_branch_name origin/remote_tag_name

Tengo un error como este:

error: pathspec `origin/remote_tag_name` did not match any file(s) known to git.

Puedo encontrar remote_tag_name cuando uso el comando git tag.


Comencemos explicando qué es una etiqueta en git

Se usa una etiqueta para etiquetar y marcar una confirmación específica en el historial.
Por lo general, se usa para marcar puntos de liberación (por ejemplo, v1.0, etc.).

Aunque una etiqueta puede parecer similar a una rama, una etiqueta, sin embargo, no cambia .
Apunta directamente a un compromiso específico en la historia.

No podrá retirar las etiquetas si no está localmente en su repositorio, por lo que primero debe fetch las etiquetas en su repositorio local.

Primero, asegúrese de que la etiqueta existe localmente haciendo

# --all will fetch all the remotes. # --tags will fetch all tags as well git fetch --all --tags --prune

Luego revisa la etiqueta ejecutando

git checkout tags/<tag_name> -b <branch_name>

En lugar de origin use las tags/ prefijo.

En este ejemplo, tiene 2 etiquetas versión 1.0 y versión 1.1, puede retirarlas con cualquiera de los siguientes:

git checkout A ... git checkout version 1.0 ... git checkout tags/version 1.0 ...

Todo lo anterior hará lo mismo ya que la etiqueta es solo un puntero a un commit dado.


origen: https://backlog.com/git-tutorial/img/post/stepup/capture_stepup4_1_1.png

¿Cómo ver la lista de todas las etiquetas?

# list all tags git tag # list all tags with given pattern ex: v- git tag --list ''v-*''

¿Cómo crear etiquetas?

Hay 2 formas de crear una etiqueta:

# normal tag git tag # annotated tag git tag -a

La diferencia entre los 2 es que al crear una etiqueta anotada puede agregar metadatos como lo tiene en un git commit:
nombre, correo electrónico, fecha, comentario y firma

¿Cómo borrar etiquetas?

# delete any given tag git tag -d <tag name> # Don''t forget to remove the deleted tag form the server with push tags

¿Cómo clonar una etiqueta específica?

Para obtener el contenido de una etiqueta determinada, puede usar el comando de checkout .
Como se explicó anteriormente, las etiquetas son como cualquier otra confirmación, por lo que podemos usar el checkout y, en lugar de usar el SHA-1, simplemente reemplácelo con el nombre de etiqueta

Opción 1:

# Update the local git repo with the latest tags from all remotes git fetch --all # checkout the specific tag git checkout tags/<tag> -b <branch>

Opcion 2:

Usando el comando clonar

Dado que git admite clones superficiales agregando --branch al comando clone, podemos usar el nombre de la etiqueta en lugar del nombre de la rama. Git sabe cómo "traducir" el SHA-1 dado a la confirmación correspondiente

# Clone a specific tag name using git clone git clone <url> --branch=<tag_name>

git clone --branch =

--branch también puede tomar etiquetas y separa el HEAD en ese commit en el repositorio resultante.


(Esta respuesta tardó un tiempo en escribirse, y la respuesta de codeWizard es correcta en cuanto a objetivo y esencia, pero no del todo completa, así que publicaré esto de todos modos).

No existe una "etiqueta Git remota". Solo hay "etiquetas". Indico que todo esto no es pedante, 1 sino porque existe una gran confusión sobre esto con los usuarios ocasionales de Git, y la documentación de Git no es muy útil para los principiantes. (No está claro si la confusión se debe a una documentación deficiente, o la documentación deficiente se debe a que esto es intrínsecamente algo confuso, o qué).

Hay "ramas remotas", más propiamente llamadas "ramas de seguimiento remoto", pero vale la pena señalar que en realidad son entidades locales. Sin embargo, no hay etiquetas remotas (a menos que las (re) invente). Solo hay etiquetas locales, por lo que debe obtener la etiqueta localmente para poder usarla.

La forma general de nombres para confirmaciones específicas, que Git llama referencias, es cualquier cadena que comience con refs/ . Una cadena que comienza con refs/heads/ nombra una rama; una cadena que comienza con refs/remotes/ nombres de una rama de seguimiento remoto; y una cadena que comienza con refs/tags/ nombra una etiqueta. El nombre refs/stash es la referencia de alijo (como lo usa git stash ; tenga en cuenta la falta de una barra inclinada final).

Hay algunos nombres de casos especiales inusuales que no comienzan con refs/ : HEAD , ORIG_HEAD , MERGE_HEAD y CHERRY_PICK_HEAD en particular, también son nombres que pueden referirse a confirmaciones específicas (aunque HEAD normalmente contiene el nombre de una rama, es decir, contiene ref: refs/heads/ branch ). Pero en general, las referencias comienzan con las refs/ .

Una cosa que Git hace para que esto sea confuso es que te permite omitir las refs/ , y a menudo la palabra después de las refs/ . Por ejemplo, puede omitir refs/heads/ o refs/tags/ cuando se refiere a una sucursal o etiqueta local, y de hecho, debe omitir refs/heads/ al retirar una sucursal local. Puede hacerlo siempre que el resultado no sea ambiguo o, como acabamos de señalar, cuando debe hacerlo (para la git checkout branch ).

Es cierto que las referencias existen no solo en su propio repositorio, sino también en repositorios remotos. Sin embargo, Git le da acceso a las referencias de un repositorio remoto solo en momentos muy específicos: es decir, durante push operaciones de fetch y push . También puede usar git ls-remote o git remote show para verlos, pero fetch y push son los puntos de contacto más interesantes.

Refspecs

Durante la fetch y la push , Git usa cadenas que llama refspecs para transferir referencias entre el repositorio local y remoto. Por lo tanto, es en estos momentos, y a través de las especificaciones técnicas, que dos repositorios de Git pueden sincronizarse entre sí. Una vez que sus nombres estén sincronizados, puede usar el mismo nombre que usa alguien con el control remoto. Sin embargo, hay algo de magia especial aquí en fetch , y afecta tanto a los nombres de ramas como a los nombres de etiquetas.

Debería pensar que git fetch indica a su Git que llame (o quizás envíe un mensaje de texto) a otro Git, el "control remoto", y que tenga una conversación con él. Al principio de esta conversación, el control remoto enumera todas sus referencias: todo en refs/heads/ y todo en refs/tags/ , junto con cualquier otra referencia que tenga. Tu Git escanea a través de estos y (según la referencia de búsqueda habitual) cambia el nombre de sus ramas.

Echemos un vistazo a la especificación de referencia normal para el origin nombre remoto:

$ git config --get-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/* $

Esta especificación de referencia le indica a su Git que tome cada nombre que coincida con refs/heads/* , es decir, cada rama en el control remoto y que cambie su nombre a refs/remotes/origin/* , es decir, mantenga la parte coincidente igual, cambiando el nombre de la rama ( refs/heads/ ) a un nombre de sucursal de seguimiento remoto ( refs/remotes/ , específicamente, refs/remotes/origin/ ).

Es a través de esta especificación de referencia que las ramas de origin convierten en sus ramas de seguimiento remoto para origin remoto. El nombre de la sucursal se convierte en el nombre de la sucursal de seguimiento remoto, con el nombre del remoto, en este caso origin , incluido. El signo más + al frente de la especificación de referencia establece la bandera de "fuerza", es decir, su rama de seguimiento remoto se actualizará para que coincida con el nombre de la rama del control remoto, independientemente de lo que se necesite para que coincida. (Sin el + , las actualizaciones de rama se limitan a los cambios de "avance rápido", y las actualizaciones de etiquetas simplemente se ignoran desde Git versión 1.8.2 más o menos, antes de eso se aplicaban las mismas reglas de avance rápido).

Etiquetas

¿Pero qué hay de las etiquetas? No hay ninguna especificación de referencia para ellos, al menos, no de manera predeterminada. Puede configurar uno, en cuyo caso la forma de la especificación de referencia depende de usted; o puede ejecutar git fetch --tags . El uso de --tags tiene el efecto de agregar refs/tags/*:refs/tags/* a la refspec, es decir, trae todas las etiquetas ( pero no actualiza su etiqueta si ya tiene una etiqueta con ese nombre, independientemente de lo que dice la etiqueta del control remoto Editar, enero de 2017: a partir de Git 2.10, las pruebas muestran que --tags actualiza por la fuerza sus etiquetas de las etiquetas del control remoto, como si el refspec lea +refs/tags/*:refs/tags/* refs +refs/tags/*:refs/tags/* ; esto puede ser una diferencia en el comportamiento de una versión anterior de Git).

Tenga en cuenta que no hay cambio de nombre aquí: si el origin remoto tiene la etiqueta xyzzy , y usted no, y git fetch origin "refs/tags/*:refs/tags/*" , obtendrá refs/tags/xyzzy agregado a su repositorio (apuntando a la misma confirmación que en el control remoto). Si usa +refs/tags/*:refs/tags/* entonces su etiqueta xyzzy , si tiene una, se reemplaza por la de origin . Es decir, el indicador de fuerza + en una especificación de referencia significa "reemplazar el valor de mi referencia con el que mi Git obtiene de su Git".

Etiquetas automáticas durante la recuperación

Por razones históricas, 3 si no utiliza la opción --tags ni la --no-tags , git fetch toma medidas especiales. Recuerde que dijimos anteriormente que el control remoto comienza mostrándole a su Git local todas sus referencias, ya sea que su Git local quiera verlas o no. 4 Your Git toma nota de todas las etiquetas que ve en este momento. Luego, a medida que comienza a descargar cualquier objeto de confirmación que necesita para manejar lo que sea que esté obteniendo, si una de esas confirmaciones tiene la misma ID que cualquiera de esas etiquetas, git agregará esa etiqueta, o esas etiquetas, si varias etiquetas tienen esa ID, a tu repositorio

Edición, enero de 2017: las pruebas muestran que el comportamiento en Git 2.10 es ahora: si su Git proporciona una etiqueta llamada T , y no tiene una etiqueta llamada T , y el ID de confirmación asociado con T es un antepasado de una de sus ramas que tu git fetch está examinando, tu Git agrega T a tus etiquetas con o sin --tags . Agregar --tags hace que tu Git obtenga todas sus etiquetas, y también fuerza la actualización.

Línea de fondo

Puede que tenga que usar git fetch --tags para obtener sus etiquetas. Si sus nombres de etiqueta entran en conflicto con sus nombres de etiqueta existentes, puede (dependiendo de la versión de Git) incluso tener que eliminar (o renombrar) algunas de sus etiquetas, y luego ejecutar git fetch --tags , para obtener sus etiquetas. Dado que las etiquetas, a diferencia de las ramas remotas, no tienen cambio de nombre automático, los nombres de las etiquetas deben coincidir con sus nombres, por lo que puede tener problemas con los conflictos.

Sin embargo, en la mayoría de los casos normales, un simple git fetch hará el trabajo, presentando sus commits y sus etiquetas correspondientes, y dado que ellos, sean quienes sean, etiquetarán los commits en el momento en que publiquen esos commits, usted se mantendrá al día con sus Etiquetas Si no crea sus propias etiquetas, ni combina su repositorio y otros repositorios (a través de múltiples controles remotos), tampoco tendrá colisiones de nombres de etiquetas, por lo que no tendrá que preocuparse por eliminar o renombrar etiquetas para poder obtener sus etiquetas.

Cuando necesitas nombres calificados

Mencioné anteriormente que puedes omitir refs/ casi siempre, y refs/heads/ y refs/tags/ y así la mayoría de las veces. Pero cuando no puedes?

La respuesta completa (o casi completa) está en la documentación de gitrevisions . Git resolverá un nombre a una ID de confirmación utilizando la secuencia de seis pasos que se proporciona en el enlace. Curiosamente, las etiquetas anulan las ramas: si hay una etiqueta xyzzy y una rama xyzzy , y apuntan a confirmaciones diferentes, entonces:

git rev-parse xyzzy

le dará la identificación a la que apunta la etiqueta. Sin embargo, y esto es lo que falta en gitrevisions , git checkout prefiere los nombres de las ramas, por lo que git checkout xyzzy lo colocará en la rama, sin tener en cuenta la etiqueta.

En caso de ambigüedad, casi siempre puede deletrear el nombre de referencia usando su nombre completo, refs/heads/xyzzy o refs/heads/xyzzy refs/tags/xyzzy . (Tenga en cuenta que esto funciona con git checkout , pero de una manera quizás inesperada: git checkout refs/heads/xyzzy provoca un pago de HEAD separado en lugar de un pago de sucursal. Es por eso que solo debe tener en cuenta que git checkout usará el nombre corto como nombre de la sucursal primero: así es como revisa la rama xyzzy incluso si existe la etiqueta xyzzy . Si desea verificar la etiqueta, puede usar refs/tags/xyzzy ).

Debido a que (como señala gitrevisions ) Git intentará refs/ name , también puede simplemente escribir tags/xyzzy para identificar la confirmación etiquetada xyzzy . (Sin embargo, si alguien ha logrado escribir una referencia válida llamada xyzzy en $GIT_DIR , esto se resolverá como $GIT_DIR/xyzzy . Pero normalmente solo los diversos nombres *HEAD deberían estar en $GIT_DIR ).

1 Bien, bien, "no solo para ser pedante". :-)

2 Algunos dirían "muy poco útil", y yo tendería a estar de acuerdo, en realidad.

3 Básicamente, git fetch y todo el concepto de controles remotos y refspecs fue una adición tardía a Git, que sucedió en la época de Git 1.5. Antes de eso, solo había algunos casos especiales ad-hoc, y la búsqueda de etiquetas era uno de ellos, por lo que se introdujo mediante un código especial.

4 Si ayuda, piense en el Git remoto como un flasher , en el sentido de la jerga.


Para obtener el código de etiqueta específico, intente crear una nueva rama y agregue el código de etiqueta. Lo hice por comando: $git checkout -b newBranchName tagName