J'ai un tas de balises non annotées dans le référentiel et je veux déterminer à quel commit ils pointent. Existe-t-il une commande qui répertorie simplement les balises et leurs SHA de validation? Vérifier l'étiquette et regarder la tête me semble un peu trop pénible.
Mise à jour
J'ai réalisé après avoir parcouru les réponses que ce que je voulais réellement, c'était simplement regarder l'histoire menant au tag, ce qui git log <tagname>
est suffisant.
La réponse marquée comme réponse est utile pour obtenir une liste de balises et de leurs validations, c'est ce que j'ai demandé. Avec un peu de piratage de shell, je suis sûr qu'il est possible de les transformer en message SHA + Commit.
git show-ref
montre sha de la balise, pas sha de la révision du repo. $ git show-ref test 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / tags / test $ git checkout test HEAD est maintenant au c7f8831 ... $ git checkout 08b9c77 HEAD est maintenant au c7f8831 ...--dereference
Réponses:
Une façon de le faire serait de
git rev-list
. Les éléments suivants afficheront la validation vers laquelle pointe une balise:Vous pouvez l'ajouter comme alias
~/.gitconfig
si vous l'utilisez souvent:Et puis appelez-le avec:
la source
git rev-parse <tag>
? Ougit rev-list -1 <tag>
?git rev-parse $TAG
renvoie le SHA1 de l'objet tag, pas le commit vers lequel il pointe.git rev-list -1
fonctionne, cependant.git rev-parse $TAG^{commit}
ougit rev-parse $TAG^{}
pour déréférencer une balise annotée / signéegit rev-list $TAG --max-count=1
git tag -a
ougit tag -s
, alors vousgit rev-parse <tag>
obtiendriez SHA-1 d'un objet de balise lui-même, tandisgit rev-list -1 <tag>
que donnerait SHA-1 de commit (révision) vers lequel il pointe, commegit rev-parse <tag>^{commit}
. HTH.Par exemple,
git show-ref --abbrev=7 --tags
vous montrera quelque chose comme ceci:la source
.git/packed-refs
ou.git/refs/tags/*
git tag --verbose
montrer aussi?-d
indicateur pour obtenir le commit référencé (sur une deuxième ligne).git show-ref
se comporte différemment sur les deux différents types de balises n'est pas une évidence ni une connaissance commune.Utilisez simplement
git show <tag>
Cependant, il sauvegarde également les différences de validation. Pour omettre ces différences, utilisez
git log -1 <tag>
. (Merci à @DolphinDream et @demisx!)la source
git show <tag>
montre le diff, pas le commit auquel le tag pointe.git show
beaucoup plus de choses sur l'écran qui n'ont pas besoin d'être là. Il masque le hachage de validation réel que l'on recherche. Une meilleure commande estgit log -1 [tag-name]
ougit log -1 --pretty=oneline [tag-name]
si vous voulez des oneliners.Sur mon référentiel,
git show-ref TAG
affiche le hachage de la balise, pas le hachage du commit vers lequel il pointe.git show-ref --dereference TAG
montre, en outre, le commit pointé.la source
Depuis Igor Zevaka :
Sommaire
Puisqu'il y a environ 4 réponses presque aussi acceptables mais différentes, je vais résumer toutes les différentes façons de skin un tag.
git rev-list -1 $TAG
( réponse ).git rev-list
renvoie les commits qui mènent à la$TAG
même chosegit log
mais ne montrant que le SHA1 du commit. Le-1
limite la sortie au commit sur lequel il pointe.git show-ref --tags
( réponse ) affichera toutes les balises (locales et récupérées à distance) et leurs SHA1.git show-ref $TAG
( réponse ) affichera l'étiquette et son chemin avec le SHA1.git rev-parse $TAG
( réponse ) affichera le SHA1 d'une balise non annotée.git rev-parse --verify $TAG^{commit}
( réponse ) affichera un SHA1 de balises annotées et non annotées. Sous Windowsgit rev-parse --verify %TAG%^^^^{commit}
(quatre chapeaux).cat .git/refs/tags/*
oucat .git/packed-refs
( réponse ) selon que la balise est locale ou récupérée à distance.la source
Utilisation
(qui retournerait SHA-1 d'un commit même pour une balise annotée).
git show-ref <tag>
fonctionnerait également s'il<tag>
n'est pas annoté. Et il y en a toujoursgit for-each-ref
(voir la documentation pour les détails).la source
git rev-parse <tag>~0
ce qui semble également fonctionner, et ne nécessite aucun échappement spécial sur Windows (sur lequel quatre chapeaux (^) sont nécessaires au lieu d'un). Le suffixe~<number>
donne le <numéro> e commit parent, donc~0
le commit lui-même. Btw,^0
est également un raccourci valide pour le^{commit}
suffixe de révision.Que dis-tu de ça:
OU
la source
Afin d'obtenir le sha / hachage du commit auquel une balise fait référence (pas le sha de la balise):
git rev-list -1 <tag>
la source
J'aimerais aussi savoir la "bonne" façon, mais en attendant, vous pouvez le faire:
la source
git show --oneline mytag | head -1
Même si c'est assez ancien, je pensais souligner une fonctionnalité intéressante que je viens de trouver pour répertorier les balises avec des commits:
Il montrera les branches qui se terminent / démarrent lors d'une validation, et les balises pour les validations.
la source
Vous pourriez également obtenir une image plus facile à interpréter de l'endroit où les balises pointent vers l'utilisation
puis faites défiler jusqu'au tag que vous recherchez via
/
.Une vue plus compacte (
--pretty=oneline
) plus toutes les têtes (-a
) pourrait également aider:Semble un peu terrifiant, mais pourrait également être aliasé
~/.gitconfig
si nécessaire.la source
Réponse courte post-Git-2
Je sais que cette question est posée depuis un bon moment. Et la réponse de CB Bailey est 100% correcte:
git show-ref --tags --abbrev
J'aime mieux celui-ci car il utilise
git tag
:Facile. Court.
PS alias comme
git taglist
avec cette commande:la source
À partir de la liste de diffusion git , voici le moyen d'obtenir la liste des hachages de validation pour les balises avec déréférencement automatique pour les balises annotées:
la source
Cela ne montre pas les noms de fichiers, mais au moins vous avez une idée du référentiel.
Chaque fichier de ce répertoire contient un SHA de validation pointant vers une validation.
la source
.git/packed-refs
a fonctionné cependant.J'aimerais aussi savoir la bonne façon , mais vous pouvez toujours jeter un coup d'œil sur:
ou:
la source
git rev-list
.Cela vous donnera le hachage SHA1 actuel
Hachage de validation abrégé
Valider le hachage
la source
git log <tag> -n 1 --pretty=%H
fonctionneSi vous souhaitez voir les détails de la balise SOMETAG (tagger, date, etc.), le hachage du commit vers lequel il pointe et un peu d'informations sur le commit mais sans le diff complet, essayez
Exemple de sortie:
la source
J'ai donc une charge de dossiers de versions, où ces dossiers peuvent être extraits de l'un des quelques référentiels différents, et peuvent être des branches dev, qa ou master ou peuvent être des versions de production, extraites d'une balise et la balise peut être annoté ou non. J'ai un script qui examinera le dossier cible et obtiendra une réponse sous la forme -. Le problème est que différentes versions de git renvoient un statut différent 'pour une extraction de balise.
J'ai donc trouvé
git show-ref --tags
travaillé initialement, à l'exception des balises annotées. Cependant, l'ajout de -d a ajouté une entrée distincte à la liste des balises, une pour la balise, l'autre pour l'annotation (la validation d'annotation a été identifiée comme ^ {} que j'ai supprimée avec sed).C'est donc le cœur de mon script, pour tous ceux qui le souhaitent: -
la source
Peut utiliser ci-dessous, il donnera le hachage de validation
git show -s --format=%H <tag>^{commit}
Si un hachage de validation abrégé est requis,
git show -s --format=%h <tag>^{commit}
la source