Edit : Jakub Narębski a plus de git-fu. La commande beaucoup plus simple suivante fonctionne parfaitement:
git describe --tags
(Ou sans le --tags
si vous avez extrait une balise annotée. Ma balise est légère, j'ai donc besoin des --tags.)
la réponse originale suit:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
Quelqu'un avec plus de git-fu peut avoir une solution plus élégante ...
Cela tire parti du fait que git-log
le journal est généré à partir de ce que vous avez extrait. %h
imprime le hachage abrégé. Trouve ensuite git describe --exact-match --tags
la balise (légère ou annotée) qui correspond exactement à cette validation.
La $()
syntaxe ci-dessus suppose que vous utilisez bash ou similaire.
git describe
afficherait le nom de la balise si vous êtes exactement sur la balise (annotée), ou<tag>-<n>-g<shortened sha-1>
sinon, où<n>
est le nombre de validations depuis<tag>
.--exact-match
à ma réponse quelques secondes avant votre commentaire. C'est bien de savoir que vous pouvez le supprimer et toujours obtenir de bonnes informations à partir d'une entrée plus floue.git rev-parse HEAD
est une meilleure solution quegit log -n1 --pretty='%h'
... mais pourquoi vous ne pouvez pas simplement écrireHEAD
(ou rien, pargit describe
défaut sur HEAD)?Cela a fonctionné pour moi
git describe --tags --abbrev=0
la source
Afficher toutes les balises sur HEAD actuel (ou commit)
la source
git describe
est une porcelaine commande en , que vous devez éviter:http://git-blame.blogspot.com/2013/06/checking-current-branch-programately.html
Au lieu de cela, j'ai utilisé:
la source
^0
pour les validations qui correspondent aux balises (par exemple, pour la balise1.0
qu'il génère1.0^0
). Existe-t-il un moyen d'avoir uniquement une sortie Git1.0
, ou dois-je utiliser sed pour cela?Lorsque vous extrayez une étiquette, vous avez ce qu'on appelle une "tête détachée" . Normalement, la validation HEAD de Git est un pointeur vers la branche que vous avez actuellement extraite. Cependant, si vous extrayez autre chose qu'une branche locale (une balise ou une branche distante, par exemple), vous avez une "tête détachée" - vous n'êtes pas vraiment sur une branche. Vous ne devriez pas faire de commits lorsque vous êtes sur une tête détachée.
Vous pouvez vérifier une balise si vous ne souhaitez pas apporter de modifications. Si vous examinez simplement le contenu des fichiers ou si vous souhaitez créer votre projet à partir d'une balise, vous pouvez utiliser
git checkout my_tag
et travailler avec les fichiers, vous pouvez utiliser tant que vous n'effectuez aucune validation . Si vous souhaitez commencer à modifier des fichiers, vous devez créer une branche basée sur la balise:va créer une nouvelle branche appelée à
my_tag_branch
partir demy_tag
. Vous pouvez valider des modifications sur cette branche.la source
git log --decorate
Cela vous indiquera quelles références pointent vers le commit actuellement extrait.
la source