Alasan utama dari apa yang bisa saya lihat adalah sebagai berikut:
- GitHub UI untuk menggabungkan permintaan tarikan saat ini (Oktober 2015) tidak memungkinkan Anda untuk mengedit baris pertama dari pesan komit, memaksanya menjadi
Merge pull request #123 from joebloggs/fix-snafoo
- GitHub UI untuk menelusuri riwayat komit saat ini tidak memungkinkan Anda untuk melihat riwayat cabang dari
--first-parent
sudut pandang
- GitHub UI untuk melihat kesalahan pada file saat ini tidak memungkinkan Anda untuk melihat kesalahan file dengan
--first-parent
sudut pandang (perhatikan bahwa ini hanya diperbaiki di Git 2.6.2, jadi kami bisa memaafkan GitHub karena tidak memiliki itu tersedia)
Jadi, ketika Anda menggabungkan ketiga situasi di atas, Anda mendapatkan situasi di mana komit tanpa ikatan digabung terlihat buruk dari GitHub UI.
Riwayat Anda dengan komit terjepit akan terlihat seperti
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
Sedangkan tanpa terjepit melakukan sejarah akan terlihat seperti
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Ketika Anda memiliki banyak komitmen dalam penelusuran PR di mana perubahan terjadi dapat menjadi sedikit mimpi buruk jika Anda membatasi diri untuk menggunakan GitHub UI .
Misalnya, Anda menemukan penunjuk nol sedang tidak direferensikan di suatu tempat dalam file ... jadi Anda berkata "siapa yang melakukan ini, dan kapan? Versi rilis apa yang terpengaruh?". Kemudian Anda berjalan ke tampilan menyalahkan di UI GitHub dan Anda melihat bahwa garis itu diubah789fdfffdf
... "oh tapi tunggu sebentar, baris itu baru saja indentasinya diubah agar sesuai dengan sisa kode", jadi sekarang Anda perlu menavigasi ke status pohon untuk file yang di komit induk dan mengunjungi kembali halaman menyalahkan ... akhirnya Anda menemukan komit ... itu komit dari 6 bulan yang lalu ... "oh **** ini dapat mempengaruhi pengguna selama 6 bulan" Anda mengatakan ... ah tapi tunggu, komit itu sebenarnya dalam Permintaan Tarik dan hanya bergabung kemarin dan belum ada yang memotong rilis ... "Sialan kalian untuk menggabungkan komitmen tanpa menekan sejarah" adalah teriakan yang biasanya dapat didengar setelah sekitar 2 atau 3 ekspedisi kode arkeologi melalui GitHub UI
Sekarang mari kita pertimbangkan bagaimana ini bekerja jika Anda menggunakan baris perintah Git (dan super-mengagumkan 2.6.2 yang memiliki perbaikan untuk git blame --first-parent
)
- Jika Anda menggunakan baris perintah Git, Anda akan dapat sepenuhnya mengontrol pesan gabungan komit dan karenanya komit gabungan bisa memiliki baris ringkasan yang bagus.
Jadi sejarah komit kita akan terlihat seperti
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Tapi kita juga bisa melakukannya
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(Dengan kata lain: Git CLI memungkinkan Anda memiliki kue dan memakannya juga)
Sekarang ketika kita menekan masalah null pointer ... well kita hanya menggunakan git blame --first-parent -w dodgy-file.c
dan kita langsung diberikan komit tepat di mana referensi-nol pointer-nol diperkenalkan ke cabang master mengabaikan perubahan spasi putih sederhana.
Tentu saja jika Anda melakukan penggabungan menggunakan GitHub UI maka git log --first-parent
itu benar-benar jelek berkat GitHub yang memaksa baris pertama dari pesan komit gabungan:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
Jadi untuk mempersingkat cerita:
GitHub UI (Oktober 2015) memiliki sejumlah kekurangan dengan cara menggabungkan permintaan tarik, bagaimana menyajikan riwayat commit dan bagaimana atributnya menyalahkan informasi. Cara terbaik saat ini untuk meretas cacat-cacat ini di GitHub UI adalah dengan meminta orang untuk menekan komitmen mereka sebelum bergabung.
Git CLI tidak memiliki masalah ini dan Anda dapat dengan mudah memilih tampilan mana yang ingin Anda lihat sehingga Anda berdua dapat menemukan alasan mengapa perubahan tertentu dibuat seperti itu (dengan melihat riwayat dari komitmen yang tidak dirusak) serta lihat komitmen terjepit.
Tulisan Skrip
Alasan terakhir yang sering dikutip untuk squashing commit adalah untuk membuat backporting lebih mudah ... jika Anda hanya memiliki satu commit untuk mendukung port (yaitu commit squashing) maka mudah untuk memilih ...
Nah jika Anda melihat sejarah git dengan git log --first-parent
maka Anda bisa saja memilih komit gabungan. Sebagian besar orang bingung menentukan komitmen memilih cherry karena Anda harus menentukan -m N
opsi tetapi jika Anda mendapat komit dari git log --first-parent
maka Anda tahu bahwa itu adalah orang tua pertama yang ingin Anda ikuti sehingga akan menjadigit cherry-pick -m 1 ...