Uzun bir geçmişi olan bir projem var. Git'te ilk taahhüdü göstermek istiyorum.
Bunu nasıl yaparım?
Uzun bir geçmişi olan bir projem var. Git'te ilk taahhüdü göstermek istiyorum.
Bunu nasıl yaparım?
Yanıtlar:
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ı.)
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
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
git rev-list --max-parents=0 HEADAynı şeyi yapacağına inanıyorum ve biraz daha basit.
Onu buldum:
git log --reverse
başlangıçtaki taahhütleri gösterir.
git log --reverse -5o görmezden kılan --reversenedense
Sadece günlüğünüzü tersine çevirebilir ve sadece ilk sonuç için başlayabilirsiniz.
git log --pretty=oneline --reverse | head -1
git log --reversegeçmişi tersine çevirir, bu yüzden ilk taahhüdü head -1yerine kullanmak zorundasınız tail -1.
-nbayrağı görmezden gelmeseydi en iyisi olurdu --reverse.
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -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.
git log -1.