Dalam pohon contoh berikut:
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
Saya mencari F - komit pertama di cabang xxx. Saya pikir itu mungkin dengan:
git log xxx --not master
dan komit terakhir yang terdaftar harus F. Apakah itu solusi yang benar atau mungkin ada beberapa kelemahannya?
Saya tahu bahwa ada pertanyaan serupa tentang stackoverflow, tetapi tidak ada yang mengusulkan solusi seperti itu, dan saya tidak yakin apakah saya melakukannya dengan benar.
Jawaban:
Di mana "cabang" adalah nama cabang spesifik Anda. Titik-titik memberi Anda semua komit yang tidak dimiliki oleh cabang itu.
tail -1
mengembalikan baris terakhir dari keluaran sebelumnya.sumber
master
, dan selama cabang Anda belum dihapus,git log <sha>..branch --oneline | tail -1
tetap akan memberikan hasil yang Anda cari.--reverse
untuk membaca log mundur dengan warna, dll.Anda harus menggunakan
merge-base
fungsionalitas yang dirancang untuk menyelesaikan persis seperti ini:sumber
sumber
Jika cabang Anda (yang lama) sekali lagi digabungkan kembali ke master tidak memberikan hasil yang diharapkan, saya telah menggunakan skrip python untuk menemukan ID komit cabang awal.
git rev-list --first-parent changeset
--first-parent hanya mengikuti perintah orang tua pertama setelah melihat komit gabungan.
Iterasi perubahan dari perintah di atas hingga cabang induk ditemukan.
sumber
namun ini hanya akan memberi Anda komit pertama pada cabang xxx yang tidak ada di master, bukan komit pertama pada cabang xxx yang pernah. yang terakhir akan sulit jika cabang xxx telah dihapus dan / atau dibuat ulang satu kali atau lebih. jika demikian, Anda dapat mencoba yang berikut:
sumber
head -n 1
bukantail -1
?tail -1
mengembalikan komit terbaru, bukan yang pertama.Saya mencoba perintah ini dan berhasil:
sumber
git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1
sumber