Bagaimana cara menjalankan git log untuk melihat perubahan hanya untuk cabang tertentu?

396

Saya memiliki cabang lokal yang melacak cabang jarak jauh / cabang utama. Setelah berjalan git-pulldan git-log, log akan menampilkan semua komit di cabang pelacakan jarak jauh serta cabang saat ini. Namun, karena ada begitu banyak perubahan yang dilakukan pada cabang terpencil, saya hanya perlu melihat komitmen yang dilakukan pada cabang lokal saat ini.

Apa yang akan menjadi perintah Git untuk digunakan hanya menunjukkan komit untuk cabang tertentu?

Catatan:

Informasi konfigurasi:

[branch "my-branch"]
  remote = origin
  merge = refs/heads/master
Jalan Raya Kehidupan
sumber

Jawaban:

527

Dengan asumsi bahwa cabang Anda dibuat master, maka sementara di cabang (yaitu, Anda memiliki cabang diperiksa):

git cherry -v master

atau

git log master..

Jika Anda tidak berada di cabang, maka Anda dapat menambahkan nama cabang ke perintah "git log", seperti ini:

git log master..branchname

Jika cabang Anda terbuat dari origin/master, katakanlah origin/masteralih-alih master.

Wayne Conrad
sumber
100
Sempurna! git log --no-merges master..persis apa yang saya butuhkan.
Highway of Life
3
@HighwayofLife: --no-mergesmungkin muncul bahwa itu hanya menampilkan komit dari cabang tertentu, tetapi itu benar-benar hanya menunjukkan komit yang tidak menghasilkan penggabungan
rynmrtn
5
Bagaimana cara melakukan ini yang tidak mengharuskan saya untuk mengetik / mengetahui cabang induk? :)
DAPAT DITERIMA
1
Untuk mendapatkan tingkat perubahan, saya menggunakan mantra berikut ini :) yang menghasilkan format log satu baris dengan nama penulis yang ditunjukkan pertama, diikuti oleh usia relatif dari komit:git log --no-merges --pretty='%C(yellow)%h%d %Creset%an %Cgreen%ar:%Creset %s' --graph master..
Noah Sussman
2
seharusnya tidak membaca? master log git .. <cabang Anda> --oneline --tidak ada penggabungan
Alex Nolasco
104

Menggunakan:

git log --graph --abbrev-commit --decorate  --first-parent <branch_name>

Ini hanya untuk cabang target (tentu saja --graph, --abbrev-commit --decorate lebih terpoles).

Opsi kuncinya adalah --first-parent: "Ikuti saja komitmen orang tua pertama setelah melihat komit gabungan" ( https://git-scm.com/docs/git-log )

Ini mencegah fork dari ditampilkan.

yerlilbilgin
sumber
25
--first-parent <branch_name>adalah pilihannya. bekerja!
parasrish
3
Di mana nama cabang adalah apa, cabang yang sejarahnya hanya ingin saya lihat? Di cabang dengan hanya 3 perubahan, ini menunjukkan saya ratusan.
Ed Randall
1
--first-parent <branch_name>juga bekerja untukku! Saya berakhir dengan alias untuk git log --first-parent $current_branch_name --no-merges. Menanggapi @EdRandall, itu akan menunjukkan komit pada cabang + yang dari mana ia bercabang. Misalnya:
rachel
2
Ups, saya segera ajukan, inilah contohnya: Anda memiliki komit A dan B pada master. Anda bercabang new_featuredari master. Anda menambahkan komit C dan D padanya. Kemudian Anda menambahkan E dan F ke master. Anda kemudian menggabungkan master ke new_feature. Menggunakan git logpada new_feature, Anda akan melihat "merge master", F, E, D, C, A, B. menggunakan git log --first-parent new_feature --no-merges, Anda akan melihat D, C, A, B.
rachel
24

Jika Anda hanya menginginkan komit yang dilakukan oleh Anda di cabang tertentu, gunakan perintah di bawah ini.

git log branch_name --author='Dyaniyal'
Dyaniyal Wilson
sumber
13

Masalah yang saya alami, yang saya pikir mirip dengan ini, adalah bahwa master terlalu jauh di depan titik cabang saya sehingga sejarah tidak berguna. (Menavigasi ke titik cabang akan memakan waktu terlalu lama.)

Setelah beberapa percobaan dan kesalahan, ini memberi saya kira-kira apa yang saya inginkan:

git log --graph --decorate --oneline --all ^master^!
GPHemsley
sumber
0

lari saja git log origin/$BRANCH_NAME

Mahdi Pedram
sumber