Git'te bir birleşmenin ebeveynlerine nasıl ulaşılır?


140

Bazı git komutları üst öğeyi düzeltme olarak alır; diğerleri (ör. git revert), üst numara olarak. Her iki vaka için ebeveynler nasıl alınır. Ben ikinci günlük bulmak için genellikle uzun bir ağaç aşağı kaydırma gerektirir gibi grafik günlük komutunu kullanmak istemiyorum.

Yanıtlar:


179

Basit git log <hash>bir birleştirme taahhüdü, ebeveynlerinin kısaltılmış karmalarını gösterir:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git ebeveynleri numaralarına göre çıkarır: ilk (en soldaki) karma ilk ebeveyn içindir, vb.

İstediğiniz tek şey sadece karmalarsa, iki eşdeğer seçenek şunlardır:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list ilk önce bir taahhüt için hash'ı listeleyecek olsa da, ebeveynlerin karmalarını da gösterebilir:

$ git rev-list --parents -n 1 <commit>

Ebeveynleri incelemek istiyorsanız, onlara doğrudan karatlarla <commit>^1ve gibi başvurabilirsiniz <commit>^2, örneğin:

git show <commit>^1

Bu genelleme yapar; bir ahtapot için size n başvurabilirsiniz birleştirme inci olarak ebeveyn <commit>^n. Tüm ebeveynlere başvurabilirsiniz <commit>^@, ancak tek bir taahhüt gerektiğinde bu işe yaramaz. Ek sonlar, ninci üst sözdiziminden sonra (ör <commit>^2^. <commit>^2^@) Görünebilir, ancak sonra ekleyemezler ^@( <commit>^@^geçerli değildir). Bu sözdizimi hakkında daha fazla bilgi için rev-parsekılavuz sayfasını okuyun .


1
Kendi sorumu cevaplıyorum: 'git rev-list --parents -n 1 <somehash>' nin sonuçları: <somehash> <parent1> <parent2>. Yani, ebeveynler bir numara.
mikemaccana

Git-ebeveynleri github.com/danielribeiro/dotfiles/blob/master/bin/git-parents adresini de kullanabilirsiniz . Sadece PATH'nize koyun ve $ git ebeveynlerini <commit> (<commit> varsayılan olarak HEAD) olarak adlandırın
Daniel Ribeiro

@jefromi, "Normal günlük çıktısının gösterildiğini de unutmayın ..." kısmının cevabınızın üstünde olmasını istiyorum. :)
Adam Monsen

3
git logve git showtek bir ebeveyn olduğunda çok farklı şeyler çıktılar. git logTutarlılık istiyorsanız tercih edin.
Noel Yap

Bu cevap, Ubuntu makinemle çalışmıyor git (v2.17.1). Çıktıda Mergedosya görmüyorum git log -1.
mja

29

Aşağıda, bir birleştirmenin ebeveynlerini görüntülemenin en basit yolu

git show --pretty=raw 3706454

14
git cat-file -p 3706454 aynı ama daha da kısa :)
sabgenton

1
Her ikisi de çok faydalı!
tecknut

Başka bir seçenekgit log --pretty=raw -1 3706454
selalerer
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.