İlk gitme 'git log' ile nasıl gösterilir?


290

Uzun bir geçmişi olan bir projem var. Git'te ilk taahhüdü göstermek istiyorum.

Bunu nasıl yaparım?


2
Sadece sonuncuyu göstermenin bir yolunu buldum git log -1.
alex

Yanıtlar:


299

Kısa cevap

git rev-list --max-parents=0 HEAD

( tiho'nun yorumundan . Chris Johnsen'in fark ettiği gibi , --max-parentsbu cevap gönderildikten sonra tanıtıldı.)

açıklama

Teknik olarak, birden fazla kök taahhüdü olabilir. Bu, daha önce bağımsız olan birden fazla geçmişin birleştirilmesiyle olur. Bir proje bir alt ağaç birleştirmesi ile entegre edildiğinde yaygındır .

git.gitDepo tarihçesi grafikte altı kök kaydedilmesini sahiptir (her biri için birer Linus başlangıç işlemek gitk bazı başlangıçta ayrı aletler, git-GUI , gitweb ve git-p4 ). Bu durumda, e83c516muhtemelen ilgilendiğimiz kişi olduğunu biliyoruz . Hem en eski taahhüt hem de kök taahhüttür.

Genel durumda o kadar basit değil.

Libfoo'nun bir süredir gelişmekte olduğunu ve geçmişini Git deposunda ( libfoo.git) sakladığını düşünün . Bağımsız olarak, “bar” projesi de geliştirilme aşamasındadır ( bar.gitancak), ancak uzun libfoo için geçerli değildir (en erken tarihteki libfoo.gittaahhüt, en erken tarihteki taahhütten önce gelen bir tarihe sahiptir bar.git). Bir noktada “bar” geliştiricileri, bir alt ağaç birleşmesi kullanarak libfoo'yu projelerine dahil etmeye karar verirler . Bu birleşme öncesinde “ilk” taahhüdü belirlemek önemsiz olabilirdi bar.git(muhtemelen sadece bir kök taahhüdü vardı). Ancak birleştirme işleminden sonra birden fazla kök taahhüt vardır ve en eski kök taahhüdü aslında libfoo tarihinden gelir"bar" değil.

DAG geçmişinin tüm kök taahhütlerini şu şekilde bulabilirsiniz:

git rev-list --max-parents=0 HEAD

Kayıt için, eğer --max-parentsmevcut değilse, bu da işe yarar :

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

Yararlı etiketleriniz varsa git name-rev, geçmişe hızlı bir genel bakış sunabilirsiniz:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin

Bonus

Bunu sık mı kullanıyorsunuz? Hatırlamak zor mu? Hızlı erişim için git takma adı ekleyin

git config --global alias.first "rev-list --max-parents=0 HEAD"

Şimdi sadece

git first

49
git rev-list --max-parents=0 HEADAynı şeyi yapacağına inanıyorum ve biraz daha basit.
Ocak'ta Tiho

3
@tiho: Evet, aynısını yapıyor ve daha basit; ancak bu seçenek bu soru / cevap zamanında tam olarak “icat edilmemiştir .
Chris Johnsen

İlk işlemek daha sahip olduğunu aklıma yaprak bir daha işlemek köküne işlemek
tiwo

@tiho Yanıtınızın sadece bir yorum değil, kendi cevabı olması gerektiğini düşünüyorum. Bu şekilde daha belirgin olacak ve çok hak ettiğiniz puanlar alacaksınız.
Russell Silva

@RussellSilva Puanları umursamıyorum, ancak başkalarının cevaplarını düzenlemenin mümkün olduğuna inanıyorum, ki bu muhtemelen yeni bir tane eklemekten daha iyi olacaktır. Kendim yapmak gerçekten rahat değilim, bunu yapmaktan çekinmeyin :)
tiho

416

Onu buldum:

git log --reverse

başlangıçtaki taahhütleri gösterir.


19
ilginci git log --reverse -5o görmezden kılan --reversenedense
Dan2552

6
@ Dan2552 Bir hata gibi görünüyor, rapor edilmelidir?
saeedgnu

23
ilk önce sonuçları 5 girişle
sınırlıyor

3
@ 太極 者 無極 而 生 doğru, bu belgelenmiş davranış.
seriousdev

44

Sadece günlüğünüzü tersine çevirebilir ve sadece ilk sonuç için başlayabilirsiniz.

git log --pretty=oneline --reverse | head -1

7
git log --reversegeçmişi tersine çevirir, bu yüzden ilk taahhüdü head -1yerine kullanmak zorundasınız tail -1.
rubiii

4
git verildiğinde -nbayrağı görmezden gelmeseydi en iyisi olurdu --reverse.
Frederick Nord


6

Bunu yapmanın en güzel yolu değil sanırım:

git log --pretty=oneline | wc -l

Bu size bir sayı verir

git log HEAD~<The number minus one>

1

git log --format="%h" | tail -10dd89fbbaşka komutlar kullanarak besleyebileceğiniz kesin karmayı (yani ) verir.

git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD son gün içindeki tüm taahhütleri görmek için.

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.