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

tener - ¿Cómo saber a qué cometa una etiqueta apunta en Git?



¿qué hace git log-oneline? (18)

Aunque esto es bastante antiguo, pensé en señalar una característica interesante que acabo de encontrar para listar etiquetas con confirmaciones:

git show <tag> --format="%h" --> 42e646e

Mostrará las ramas que terminan / comienzan en una confirmación, y las etiquetas para confirmaciones.

Tengo un montón de etiquetas sin anotar en el repositorio y quiero averiguar qué compromiso apuntan. ¿Hay un comando que solo enumere las etiquetas y sus SHA de confirmación? Revisar la etiqueta y mirar la CABEZA me parece demasiado laborioso.

Actualizar

Después de revisar las respuestas, me di cuenta de que lo que realmente quería era mirar simplemente el historial que lleva a la etiqueta, para lo cual git log <tagname> es suficiente.

La respuesta que está marcada como respuesta es útil para obtener una lista de etiquetas y sus confirmaciones, que es lo que pregunté. Con un poco de pirateo, estoy seguro de que es posible transformarlos en un mensaje SHA + Commit.


De Igor Zevaka :

Resumen

Ya que hay alrededor de 4 respuestas casi igualmente aceptables pero diferentes, resumiré todas las formas diferentes de colocar una etiqueta.

  1. git rev-list -1 $TAG ( answer ). git rev-list genera las confirmaciones que llevan al $TAG similar al git log pero que solo muestra el SHA1 de la confirmación. El -1 limita la salida a los puntos de confirmación.

  2. git show-ref --tags ( answer ) mostrará todas las etiquetas (locales y recuperadas desde el control remoto) y sus SHA1.

  3. git show-ref $TAG ( answer ) mostrará la etiqueta y su ruta junto con el SHA1.

  4. git rev-parse $TAG ( answer ) mostrará el SHA1 de una etiqueta sin anotar.

  5. git rev-parse --verify $TAG^{commit} ( answer ) mostrará un SHA1 de etiquetas anotadas y no anotadas. En Windows use git rev-parse --verify %TAG%^^^^{commit} (cuatro sombreros).

  6. cat .git/refs/tags/* o cat .git/packed-refs ( answer ) dependiendo de si la etiqueta es local o no desde el remoto.


Desde la lista de correo de git , esta es la forma de obtener la lista de hashes de confirmación para etiquetas con eliminación automática de referencias para etiquetas anotadas:

git for-each-ref --format=''%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)'' refs/tags


En mi repositorio, git show-ref TAG muestra el hash de la etiqueta, no el hash de la confirmación a la que apunta.

git show-ref --dereference TAG muestra, además, el compromiso al que se apunta.


Esto no muestra los nombres de los archivos, pero al menos tienes una idea del repositorio.

cat .git/refs/tags/*

Cada archivo en ese directorio contiene un SHA de confirmación que apunta a un compromiso.


Esto te dará el hash SHA1 actual

Abreviado Commit Hash

git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280

Cometer hash

git log --decorate=full


Para obtener el sha / hash de la confirmación a la que se refiere una etiqueta (no el sha de la etiqueta):

git rev-list -1 <tag>


Por lo tanto, tengo una carga de carpetas de versiones, donde esas carpetas pueden desprotegerse de uno de los pocos repositorios diferentes, y pueden ser dev, qa o ramas maestras o pueden ser versiones de producción, desprotegerse de una etiqueta, y la etiqueta puede ser anotado o no. Tengo una secuencia de comandos que buscará en la carpeta de destino y obtendrá una respuesta en el formulario. El problema es que las diferentes versiones de git devuelven un estado diferente para una comprobación de etiqueta.

Así que encontré que git show-ref --tags funcionó inicialmente, a excepción de las etiquetas anotadas. Sin embargo, al agregar -d se agregó una entrada separada a la lista de etiquetas, una para la etiqueta, la otra para la anotación (la confirmación de la anotación se identificó como ^ {} que eliminé con sed).

Así que este es el núcleo de mi script, para cualquiera que lo quiera:

REPO=`git --git-dir=${TARGET} remote show origin -n | / grep "Fetch URL:" | / sed -E "s/^.*//(.*)$//1/" | / sed "s/.git$//"` TAG=`git --git-dir=${TARGET} show-ref -d --tags | / grep /`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD/` | / cut -d/ -f2 | / cut -d/ -f3 | / sed "s//^{}$//"` if [ "${TAG}" == "" ] ; then BRANCH=`git --git-dir=${TARGET} show-ref --heads | / grep /`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD/` | / cut -d/ -f2 | / cut -d/ -f3` TAG=${BRANCH} fi


Qué tal esto:

git log -1 $TAGNAME

O

git log -1 origin/$TAGNAME


Se puede usar a continuación, le dará el hash de confirmación.
git show -s --format=%H <tag>^{commit}

Si se requiere hash de confirmación abreviado, git show -s --format=%h <tag>^{commit}


Si desea ver los detalles de la etiqueta SOMETAG (etiquetador, fecha, etc.), el hash de la confirmación señala y un poco de información sobre la confirmación, pero sin la diferencia completa, intente

git show --name-status SOMETAG

Ejemplo de salida:

tag SOMETAG Tagger: .... Date: Thu Jan 26 17:40:53 2017 +0100 .... tag message ....... commit 9f00ce27c924c7e972e96be7392918b826a3fad9 Author: ............. Date: Thu Jan 26 17:38:35 2017 +0100 .... commit message ....... ..... list of changed files with their change-status (like git log --name-status) .....


Solo usa git show <tag>

Sin embargo, también se vuelca commit diffs. Para omitir esas diferencias, use git log -1 <tag> . (¡Gracias a @DolphinDream y @demisx!)


También me gustaría saber cómo hacerlo, pero siempre puedes echar un vistazo a:

$ cat .git/packed-refs

o:

$ cat .git/refs/tags/*


También me gustaría saber la forma "correcta", pero mientras tanto, puedes hacer esto:

git show mytag | head -1


También podría obtener una imagen más fácil de interpretar de dónde las etiquetas apuntan a usar

git log --graph |git name-rev --stdin --tags |less

y luego desplácese hasta la etiqueta que está buscando a través de / .

Una vista más compacta ( --pretty=oneline ) más todas las cabezas ( -a ) también podrían ayudar:

git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less

Parece un poco aterrador, pero también podría tener un alias en ~/.gitconfig si es necesario.

~/.gitconfig [alias] ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less


Una forma de hacerlo sería con git rev-list . Lo siguiente dará salida a la confirmación a la que apunta una etiqueta:

$ git rev-list -n 1 $TAG

Podría agregarlo como un alias en ~/.gitconfig si lo usa mucho:

[alias] tagcommit = rev-list -n 1

Y luego llámalo con:

$ git tagcommit $TAG


Utilizar

git rev-parse --verify <tag>^{commit}

(lo que devolvería SHA-1 de una confirmación incluso para la etiqueta anotada).

git show-ref <tag> también funcionaría si <tag> no está anotado. Y siempre hay git for-each-ref (ver documentación para más detalles).


git show-ref --tags

Por ejemplo, git show-ref --abbrev=7 --tags le mostrará algo como lo siguiente:

f727215 refs/tags/v2.16.0 56072ac refs/tags/v2.17.0 b670805 refs/tags/v2.17.1 250ed01 refs/tags/v2.17.2