Menampilkan komitmen yang dibuat langsung ke cabang, mengabaikan penggabungan di Git

87

Saat menggunakan git, apakah ada cara untuk menunjukkan komit yang dibuat ke sebuah cabang, sambil mengabaikan semua komit yang muncul dari penggabungan?

Saya mencoba meninjau perubahan kode yang dibuat pada cabang sambil mengabaikan perubahan yang kita buat pada cabang lain yang digabungkan. Saya tahu hampir tidak mungkin untuk menunjukkan perbedaan dengan cara itu, tapi saya ingin bisa cari tahu komitmen mana yang perlu saya tinjau.

Kucing Saluran
sumber

Jawaban:

124

--no-merges

Kedua orang tua memiliki bobot yang sama dalam banyak konteks di git. Jika Anda selalu konsisten dalam menggabungkan perubahan lain, Anda mungkin menemukan bahwa ini memberi Anda apa yang Anda inginkan.

git log --no-merges --first-parent

Jika tidak, Anda mungkin dapat mengecualikan komit dari cabang bernama lain.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

Jika Anda ingin meninjau perubahan yang akan Anda gabungkan kembali menjadi cabang utama, maka hal termudah yang harus dilakukan adalah melakukan penggabungan pada klon lokal lalu lihat saja perbedaannya dengan induk pertama sebelum menerbitkan gabungan.

CB Bailey
sumber
Perintah pertama ini sangat baik dalam "cabang-per-fitur yang tepat" ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Adam Dymitruk
1
Sepertinya saya mendapatkan sebagian besar komitmen dari cabang itu, tetapi masih menunjukkan komitmen yang ditarik dari master. Kami memiliki begitu banyak cabang yang mengecualikan yang lain tidak praktis.
Saluran Kucing
@ChannelCat mengapa tidak me-rebase cabang Anda ke yang lain, maka semua komit akan berada di akhir?
Mark Ingram
7

Anda dapat menggunakan git cherryuntuk itu, itu akan menemukan Anda komit yang belum digabungkan ke hulu, atau komit yang ada di satu cabang tetapi tidak di yang lain. Jadi diberi dua cabang bernama "cabang-Anda" dan "master":

git cherry -v your-branch master

akan menunjukkan kepada Anda daftar komit dibandingkan dengan id patch mereka:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

Anda dapat melihat bahwa komit yang diawali dengan "-" adalah yang muncul di kedua cabang, sedangkan yang diawali dengan "+" hanya tersedia di cabang Anda.

Sebagai alternatif, Anda dapat menggunakan:

git log --pretty=format:"%h %s" your-branch..master --no-merges

yang akan menunjukkan daftar komit yang dilakukan di "cabang-Anda" yang belum ada di "master"

jbochniak.dll
sumber
Saat percobaan saya untuk mengedit jawaban Anda ditolak, saya akan mempostingnya di sini: di baris git terakhir Anda, harus ada tiga titik, bukan dua, di antara nama cabang. Seperti ini: cabang
-mu
@vedranm Anda tidak memerlukan 3 titik, hanya dua ... meskipun 3 bekerja dengan cara yang sama seperti 2 bekerja.
Zzzach ...
4

Cara yang sangat hackish:

git log --graph --oneline --no-merges thebranch|grep '^\*'

fge
sumber