Apa cara terbaik untuk mendapatkan log komit pada cabang sejak saat itu bercabang dari cabang saat ini? Solusi saya sejauh ini adalah:
git log $(git merge-base HEAD branch)..branch
Dokumentasi untuk git-diff menunjukkan bahwa git diff A...B
itu setara dengan git diff $(git-merge-base A B) B
. Di sisi lain, dokumentasi untuk git-rev-parse menunjukkan bahwa r1...r2
didefinisikan sebagai r1 r2 --not $(git merge-base --all r1 r2)
.
Mengapa ini berbeda? Catatan yang git diff HEAD...branch
memberi saya diff yang saya inginkan, tetapi perintah git log yang sesuai memberi saya lebih dari yang saya inginkan.
Dalam gambar, anggap ini:
x --- y --- z --- cabang / --- a --- b --- c --- d --- e --- KEPALA
Saya ingin mendapatkan log yang berisi komit x, y, z.
git diff HEAD...branch
berikan komitmen ini- Namun,
git log HEAD...branch
beri x, y, z, c, d, e.
Jawaban:
Dalam konteks daftar revisi,
A...B
adalah bagaimanagit-rev-parse
mendefinisikannya. git-log mengambil daftar revisi.git-diff
tidak mengambil daftar revisi - dibutuhkan satu atau dua revisi, dan telah menetapkanA...B
sintaks untuk mengartikan bagaimana definisi itu didefinisikan dalam halamangit-diff
manual. Jikagit-diff
tidak secara eksplisit mendefinisikanA...B
, maka sintaks itu akan tidak valid. Perhatikan bahwa halamangit-rev-parse
manual dijelaskanA...B
di bagian "Menentukan Rentang", dan segala sesuatu di bagian itu hanya valid dalam situasi di mana rentang revisi valid (yaitu ketika daftar revisi diinginkan).Untuk mendapatkan log yang berisi hanya x, y, dan z, coba
git log HEAD..branch
(dua titik, bukan tiga). Ini identik dengangit log branch --not HEAD
, dan berarti semua komit pada cabang yang tidak ada di HEAD.sumber
git diff HEAD..branch
identik dengangit diff HEAD branch
. Hal utama yang perlu diingat di sini adalah bahwa log mengambil daftar / rentang revisi, sementara diff tidak. Itu sebabnya mereka memperlakukan argumen mereka secara berbeda.git diff HEAD...branch
(tiga titik) sesuai dengan outputgit log HEAD..branch
melakukan persis apa yang Anda minta, ketika Anda berada di
master
cabang.Saya juga sangat suka:
Yang tidak persis apa yang Anda tanyakan, tetapi masih sangat berguna dalam konteks yang sama.
sumber
git cherry
memang sangat berguna. Terima kasih :)gif-diff
:git diff x..z
, atau misalnya saya sendiri itugit diff 13bc4d..8eda3a
.Yang ingin Anda lihat adalah daftar komitmen keluar. Anda dapat melakukan ini menggunakan
atau
Di mana saya berasumsi bahwa "branchName" telah dibuat sebagai cabang pelacakan "master".
Demikian pula, untuk melihat perubahan yang masuk Anda dapat menggunakan:
sumber
Ini mirip dengan jawaban yang saya posting di: Pratinjau dorongan Git
Masukkan fungsi-fungsi ini ke profil Bash Anda:
Anda bisa menggunakan ini seperti:
Ini akan bekerja dengan cabang apa pun.
sumber
Mirip dengan beberapa jawaban seperti Alex V dan NDavis, tetapi tidak satupun dari mereka yang sama.
Saat sudah di cabang yang dimaksud
Menggunakan:
Yang menggabungkan beberapa fitur:
Memperbarui:
Ini mungkin seharusnya
git diff master
, tetapi juga ini menunjukkan diff, bukan komitmen seperti pertanyaan yang ditentukan.sumber
git co master; git pull
sejak Anda membuat cabang,git diff master
tidak akan banyak gunanya untuk membuat perbedaan HANYA diperkenalkan oleh komit di cabang yang ditentukan.git diff <branch1>...<branch2>
akan menampilkan perubahan yang diperkenalkan olehbranch2
.Lempar a -p di sana untuk melihat beberapa PERUBAHAN FILE
Buat beberapa alias:
Lihat komitmen unik cabang:
sumber
Untuk melihat log cabang saat ini sejak bercabang master:
git log master...
Jika saat ini Anda berada di master, untuk melihat log cabang lain karena bercabang master:
git log ...other-branch
sumber
(3dots) tetapi terkadang ini menunjukkan '+' bukannya '='
sumber
saya menemukan
lebih berguna, karena Anda tidak hanya mendapatkan pesan komit tetapi juga seluruh perbedaan. Jika Anda sudah berada di cabang yang ingin Anda lihat perubahannya dan (misalnya) ingin melihat apa yang telah berubah menjadi master, Anda dapat menggunakan:
sumber