Obtenez le hachage de la version courte Git


382

Existe-t-il un moyen plus propre d'obtenir le hachage de la version courte HEADde Git?

Je veux voir la même sortie que celle que j'obtiens:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

J'ai utilisé à l'origine la commande ci-dessus pour générer une chaîne de version, mais c'est encore mieux:

git describe --tags

Il produira des chaînes comme 0.1.12(commit taggé) ou 0.1.11-5-g0c85fbc(cinq commits après le tag).


2
Puisque vous semblez être bon dans la manipulation de données avec des tuyaux et ainsi de suite, vous devriez connaître les alias git . Dans ce cas, il y a une commande pour ce que vous voulez (voir les réponses) mais finalement vous trouverez quelque chose là où il n'y en a pas, et les alias sont parfaits pour cela.
MatrixFrog

@ MatrixFrog merci pour le conseil! J'avais déjà quelques alias git simples, mais je ne savais pas à quel point ils pouvaient être puissants jusqu'à présent. J'aime particulièrement l'affichage graphviz.
Attila O.

1
Huh. Lorsque je cours, git describe --tagsje reçois le message "fatal: aucun nom trouvé, ne peut rien décrire". .
Quinn Comendant

@QuinnComendant Vous aurez probablement besoin de marquer quelque chose d'abord pour --tagsfonctionner. Essayez d'abord de créer une balise ; par exemple git tag 1.0.0.
Attila O.

Réponses:


697

Essaye ça:

git rev-parse --short HEAD

La commande git rev-parsepeut effectuer un nombre remarquable de choses différentes, vous devez donc parcourir la documentation très attentivement pour le détecter.


4
vous pouvez faire l'inverse et obtenir le hachage de validation long à partir du hachage de validation court en procédant comme suitgit rev-parse HEAD
Andy

9
La commande fonctionne également avec de longs ID de rév qui sont copiés-collés à partir d'autres sources comme git log, par exemple git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fretours97dd2ae
chiborg

3
Cela fonctionne simplement avec des références. Vous pouvez utiliser HEAD, des noms de balise, des noms de branche ou des hachages simples.
d12frosted le

1
Attention, cela renvoie un hachage de validation à 7 caractères (par défaut) alors que de nombreux endroits comme gitlab utilisent 8 caractères!
masterxilo

3
Vous pouvez utiliser git rev-parse --short=8 HEADpour obtenir la longueur de 8 caractères utilisée par GitLab. Vous pouvez également définir core.abbrevà 8 pour un git config core.abbrev 8
dépôt

112

Vous pouvez faire à peu près n'importe quel format avec --pretty=format:

git log -1 --pretty=format:%h 

70
git log -1 --abbrev-commit

le fera également.

git log --abbrev-commit

répertorie les entrées du journal avec la somme de contrôle SHA-1 abrégée.


1
Le second est exactement ce que je cherchais! Très simple à retenir et utile au quotidien.
iFreilicht

Fonctionne également avec git log --pretty=oneline, qui contrairement à --oneline, imprime autrement les hachages en taille réelle.
sdaau

46

Un moyen simple de voir la version courte de Git commit et le message Git commit est:

git log --oneline

Notez que ceci est un raccourci pour

git log --pretty=oneline --abbrev-commit

1
--oneline est la meilleure option
Juan Ignacio Barisich

1
@JuanIgnacioBarisich la meilleure option dépend de la quantité d'informations dont vous avez besoin pour afficher. Dans le cas où l'on a besoin de plus d'informations comme l'auteur ou la date, alors git log --abbrev-commit serait une meilleure option. également enregistrer --pretty pourrait être une meilleure option pour choisir les informations à enregistrer
vélocité

35

Un moyen très simple consiste à:

git describe --always

1
ha, sweet, qui résout les cas où git describe échouera autrement (parce que describe attend un tag quelque part dans l'histoire) thx
vif

8
Pas bon si vous voulez strictement le hachage court - car cela peut retourner une balise annotée s'il y en a une.
Zitrax

Dans certains cas, cela git describe --longpourrait aider. De la documentation : "Toujours afficher le format long (la balise, le nombre de validations et le nom de validation abrégé) même lorsqu'il correspond à une balise ." [c'est moi qui souligne]
djvg

L'utilisation --longest meilleure mais parfois vous obtenez un hachage court et parfois 3 éléments séparés par des tirets. Ces jours-ci, j'utilise la réponse acceptée. À l'époque, je ne connaissais pas les balises annotées - peut-être qu'elles n'existaient même pas!
Steven Shaw

16

Branche avec hachage court et dernier commentaire:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

J'ai Git version 2.7.4 avec les paramètres suivants:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Maintenant, quand je le fais:

git log --pretty=oneline

J'obtiens un identifiant de validation abrégé de huit chiffres:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
SherylHohman

1
Bonne idée. Apprécié, Sheryl
Down the Stream

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.