Git sürümünün kısa karmasını alın


381

HEADGit'ten kısa sürüm karmasını almanın daha temiz bir yolu var mı ?

Ben almak aynı çıktı görmek istiyorum:

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

Başlangıçta bir sürüm dizesi oluşturmak için yukarıdaki komutu kullandım, ancak bu daha iyi:

git describe --tags

0.1.12(Tagged commit) veya 0.1.11-5-g0c85fbc(etiketten beş komisyon sonra ) gibi dizeler çıkarır.


2
Verileri pipetlerle ve ne olursa olsun manipüle etmekte iyi göründüğünüz için, git takma adları hakkında bilgi sahibi olmalısınız . Bu durumda, istediğiniz şey için bir komut vardır (cevaplara bakın), ancak sonunda olmayan bir şey bulacaksınız ve takma adlar bunun için harika.
MatrixFrog

@ MatrixFrog bahşiş için teşekkürler! Zaten bazı basit git takma adlarım vardı, ama şimdiye kadar ne kadar güçlü olabileceklerini bilmiyordum. Özellikle grafik ekranını seviyorum.
Attila O.Nis

1
Huh. Koştuğumda git describe --tags, "ölümcül: İsim bulunamadı, hiçbir şeyi açıklayamıyorum" mesajını alıyorum . .
Quinn Comendant

@QuinnComendant Çalışması için muhtemelen bir şey etiketlemeniz gerekiyor --tags. Önce bir etiket oluşturmayı deneyin ; örn git tag 1.0.0.
Attila O.

Yanıtlar:


696

Bunu dene:

git rev-parse --short HEAD

Komut git rev-parseolağanüstü sayıda farklı şey yapabilir, bu yüzden bunu fark etmek için belgeleri çok dikkatli bir şekilde gözden geçirmeniz gerekir.


4
aşağıdakileri yaparak tersi yapabilir ve kısa taahhüt karma'sından uzun taahhüt karmasını alabilirsinizgit rev-parse HEAD
Andy

9
Komut ayrıca git log, örneğin git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fdöndürür97dd2ae
chiborg

3
Sadece referanslarla çalışır. HEAD, etiket adları, şube adları veya düz karmaları kullanabilirsiniz.
d12frosted

1
Uyarı, gitlab gibi birçok yerde 8 karakter kullanırken, bu varsayılan olarak 7 karakterlik bir sağlama karması döndürür!
masterxilo

3
git rev-parse --short=8 HEADGitLab tarafından kullanılan 8 karakter uzunluğunu elde etmek için kullanabilirsiniz . Ayrıca ayarlayabilirsiniz core.abbrevgibi bir komutla belirli bir git repo için 8 git config core.abbrev 8 Kaynak
n8felton

112

İstediğiniz neredeyse her formatı yapabilirsiniz --pretty=format:

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

70
git log -1 --abbrev-commit

bunu da yapacak.

git log --abbrev-commit

SHA-1 sağlama toplamı kısaltılmış günlük girişlerini listeler.


1
İkincisi tam olarak aradığım şey! Hatırlanması çok kolay ve günlük hayatta kullanışlı.
iFreilicht

Ayrıca git log --pretty=onelineaksine çalışır --oneline, aksi takdirde tam boyutlu karma yazdırır.
sdaau

46

Git kesinleştirme kısa sürümünü ve Git kesinleştirme mesajını görmenin basit bir yolu:

git log --oneline

Bunun kısayol olduğunu unutmayın

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

1
--oneline en iyi seçenektir
Juan Ignacio Barisich

1
@JuanIgnacioBarisich en iyi seçenek ne kadar bilgi görüntülemeniz gerektiğine bağlıdır. Yazar veya tarih gibi daha fazla bilgiye ihtiyaç duyulması durumunda git log --abbrev-commit daha iyi bir seçenek olacaktır. Ayrıca log --pretty hangi bilgilerin günlüğe kaydedileceğini seçmek için daha iyi bir seçenek olabilir
hız

35

Gerçekten basit bir yol:

git describe --always

1
ha, tatlı, git tarifinin başka şekilde başarısız olacağı durumları ele alır (çünkü tarif, tarihin herhangi bir yerinde bir etiket bekler) thx
hevesli

8
Kısa karmayı kesinlikle istiyorsanız iyi değil - bu açıklamalı bir etiketi döndürebildiğinden bir tane var.
Zitrax

Bazı durumlarda git describe --longyardımcı olabilir. Gönderen docs : "Her zaman çıkış uzun biçimi (etiket, kaydedilmesini sayısı ve taahhüt kısaltılmış adı) bir etiket ile eşleşen bile ." [benim vurgu]
djvg

Kullanmak --longdaha iyidir, ancak bazen kısa bir karma ve bazen de tire ile ayrılmış 3 öğe elde edersiniz. Bugünlerde kabul edilen cevabı kullanıyorum. O günlerde, açıklamalı etiketler hakkında bilgim yoktu - belki de yoktu!
Steven Shaw

16

Kısa karma ve son yorum içeren şube:

git branch -v

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

10

Git sürüm 2.7.4 ile aşağıdaki ayarlara sahibim:

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

Şimdi ne zaman:

git log --pretty=oneline

Sekiz basamaklı kısaltılmış bir taahhüt kimliği alıyorum:

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

1
Bu kod soruyu cevaplayabilirken, sorunun nasıl ve neden çözüldüğüne dair ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
SherylHohman

1
İyi fikir. Takdir ettim, Sheryl
Down the Stream

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.