Git: Cara membuat daftar komit di cabang ini tetapi tidak dari cabang yang digabungkan

90

Misalkan riwayat git commit Anda terlihat seperti ini:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

Apakah mungkin memiliki daftar git hanya komit pada master, AF? Dengan kata lain, jika komit berada di cabang yang digabungkan, saya tidak ingin itu ditampilkan.

wch
sumber
2
Jadi, bagaimana git mengetahui bagian mana dari Ddan Zmerupakan bagian dari cabang yang digabungkan?
Romain
2
Saat digabungkan dari master, komitmen master sebelumnya adalah orang tua pertama yang digabungkan. git logmemungkinkan untuk menampilkan hanya komitmen tersebut dengan --first-parent, sehingga Anda mendapatkan hal yang tepat
CharlesB

Jawaban:

133

git logmemiliki opsi --first-parent, jadi Anda tidak akan mendapatkan topicriwayat.

Saat digabungkan dari master, masterkomit adalah orang tua pertama yang digabungkan. Git log memungkinkan untuk menampilkan hanya komit tersebut dengan --first-parent, jadi Anda mendapatkan hal yang tepat.

CharlesB
sumber
25
+1 --first-parentmelakukannya :) dikombinasikan dengan --no-mergesAnda dapat menyembunyikan komit gabungan
c00kiemon5ter
Saya memberi suara positif, tetapi tampaknya masih berlebihan dibandingkan dengan jawaban saya
UpAndAdam
22

TLDR : git log origin/master --no-mergesakan memberi Anda log master dan mengecualikan komit yang digabungkan (dalam hal ini x, y, z)

Poin Asli

Ada cara umum lain untuk melakukannya yang tidak bergantung pada --first-parentyang akan membantu dalam situasi tertentu .. menggunakan filter pengecualian cabang

git log origin/topic ^origin/master Ini akan memberi Anda log origin/topicdengan semua origin/masterkomit dihapus.

Anda juga dapat menambahkan --no-mergesyang akan menyembunyikan komit gabungan yang mungkin Anda inginkan atau tidak inginkan.

Tip praktis lainnya adalah menggunakan shortlogalih-alih logyang akan memberi Anda lebih banyak ringkasan singkat yang dapat berguna untuk catatan rilis, atau komunikasi tentang apa di cabang.

Perbarui
Setelah membaca ulang ini, Anda sebenarnya ingin hampir kebalikan dari apa yang saya posting; namun itu akan berakhir dengan mengecualikan semua yang ada di master dan foo ( git log origin/master ^origin/foo). Namun Anda juga bisa mendapatkan apa yang Anda minta (sembunyikan semua komitmen yang merupakan bagian dari penggabungan) dengangit log origin/master --no-merges

UpAndAdam
sumber
0

Jawaban oleh Charles bekerja untuk saya.

git log has option --first-parent --no-merges, so you won't get topic history.

Tetapi Jika Anda menggunakan antarmuka pengguna grafis untuk aktivitas Git Anda seperti, Git Extension, SourceTree, Tortoise Git,

Lalu ada opsi langsung untuk memeriksa orang tua pertama di alat Anda. Saya berpikir untuk menambahkan jawaban ini ke daftar karena kebanyakan orang menganggap Antarmuka Grafis mudah. dan Anda dapat langsung memilih semua komit dari cabang tertentu dari alat, jika diperlukan.

Saya telah melampirkan contoh dua alat, Ini akan serupa untuk alat lain juga: [Saya telah mengaburkan nama pengguna, nama repo git karena ini adalah repositori pribadi, tetapi Anda masih bisa mendapatkan ide bagaimana menggunakan orang tua pertama dari alat ]

  1. Ekstensi Git
    • Buka Git Extension -> Lihat cabang fitur yang ingin Anda lihat komitnya, ada opsi untuk memilih komit pertama seperti yang ditunjukkan pada Gambar:

masukkan deskripsi gambar di sini

  1. Tortoise Git
    • Buka folder repositori -> Klik pada Tampilkan log dari Tortoise Git -> Periksa cabang dan pilih komit pertama seperti yang ditunjukkan pada Gambar

masukkan deskripsi gambar di sini

KushalSeth
sumber
-3

Apa ini tidak berhasil?

git log master
git log --stat master
Stefan Kendall
sumber
Tidak, itu tidak berhasil. Komitmen penggabungan memiliki dua orang tua; semua pelacakan kembali dari kedua orang tua itu ada di cabang 'master'.
GoZoner