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).

Attila O.
la source
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.
Duplication possible de git pour obtenir un hachage court à partir du hachage régulier
Cristian Ciupitu

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.

Mark Longair
la source
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 
Karl Bielefeldt
la source
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.

Sanjeev
la source
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
Le poignard de Gilbert Arenas
la source
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
Steven Shaw
la source
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
Fabrice
la source
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
...
En aval
la source
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
1

Et ça :

git log --pretty="%h %cD %cn %s"  

il montre quelque chose comme:

674cd0d mer., 20 nov.2019 12:15:38 +0000 Bob commit message

voir la jolie documentation sur le format entrer la description du lien ici

rapidité
la source