Bagaimana cara membuat orang tua dari gabungan komit di git?

142

Beberapa perintah git menggunakan induk sebagai revisi; lainnya (seperti git revert), sebagai nomor induk. Bagaimana mendapatkan orang tua untuk kedua kasus tersebut. Saya tidak ingin menggunakan perintah log grafis karena sering kali memerlukan scrolling ke bawah pohon panjang untuk menemukan orang tua kedua.

Casebash
sumber

Jawaban:

183

Simple git log <hash>dipanggil untuk komit gabungan menunjukkan disingkat hashes dari orang tuanya:

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

git mengeluarkan orang tua sesuai dengan nomor mereka: hash pertama (paling kiri) adalah untuk orang tua pertama, dan seterusnya.

Jika yang Anda inginkan hanyalah hash, dua pilihan yang setara adalah:

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

git rev-list dapat juga menunjukkan hash orang tua, meskipun itu akan mencantumkan hash untuk komit:

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

Jika Anda ingin memeriksa orang tua, Anda dapat merujuk mereka langsung dengan karat sebagai <commit>^1dan <commit>^2, misalnya:

git show <commit>^1

Ini menggeneralisasi; untuk gurita menggabungkan Anda dapat merujuk ke n th induk sebagai <commit>^n. Anda dapat merujuk ke semua orang tua dengan <commit>^@, meskipun ini tidak berfungsi ketika satu komit diperlukan. Sufiks tambahan bisa muncul setelah sintaks induk ke- n (misalnya <commit>^2^, <commit>^2^@), sedangkan sufiks tidak bisa setelah ^@( <commit>^@^tidak valid). Untuk lebih lanjut tentang sintaks ini, baca rev-parsehalaman manual.

Bertingkat
sumber
2
Menjawab pertanyaan saya sendiri: hasil dari 'git rev-list --parents -n 1 <somehash>' adalah: <somehash> <parent1> <parent2>. Yaitu, orang tua satu nomor.
mikemaccana
Anda juga dapat menggunakan git- parent github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Masukkan saja ke dalam PATH Anda dan panggil $ git parent <commit> (<commit> defaultnya ke HEAD)
Daniel Ribeiro
@jefromi, saya benar-benar ingin bahwa bagian "Perhatikan juga bahwa keluaran log normal menunjukkan ..." berada di atas jawaban Anda. :)
Adam Monsen
3
git logdan git showmengeluarkan hal-hal yang sangat berbeda jika hanya ada satu orang tua. Lebih suka git logjika Anda menginginkan konsistensi.
Noel Yap
Jawaban ini tidak berfungsi di mesin Ubuntu saya dengan git (v2.17.1). Saya tidak melihat Mergefile dalam git log -1output.
mja
31

Berikut ini adalah cara termudah yang saya temukan untuk melihat induk gabungan

git show --pretty=raw 3706454
pengguna1483344
sumber
15
git cat-file -p 3706454 adalah sama tetapi bahkan lebih pendek :)
sabgenton
1
Keduanya sangat berguna!
tecknut
Pilihan laingit log --pretty=raw -1 3706454
selalerer