Jawaban:
Jika Anda menambahkan --preserve-merges
opsi (atau sinonimnya -p
) ke git rebase -i
perintah, maka git akan mencoba untuk mempertahankan penggabungan saat rebasing, daripada membuat linierisasi sejarah, dan Anda harus dapat mengubah komit penggabungan juga:
git rebase -i -p HEAD~5
HEAD~5
induk dari komit yang ingin Anda ubah (biasanya sha1 ^).
--preserve-merges
sekarang--rebase-merges
Perhatikan bahwa, mulai git1.7.9.6 (dan git1.7.10 +), git merge
itu sendiri akan selalu memicu editor , bagi Anda untuk menambahkan detail ke gabungan.
"
git merge $tag
" untuk menggabungkan tag beranotasi selalu membuka editor selama sesi edit interaktif. seri v1.7.10 memperkenalkan variabel lingkungan GIT_MERGE_AUTOEDIT untuk membantu skrip yang lebih lama menolak perilaku ini, tetapi track pemeliharaan juga harus mendukungnya.
Itu juga memperkenalkan variabel lingkungan GIT_MERGE_AUTOEDIT
untuk membantu skrip yang lebih lama menolak perilaku ini.
Lihat " Antisipasi Git 1.7.10 ":
Baru-baru ini dalam sebuah diskusi di milis Git , Linus mengakui (dan saya setuju) bahwa ini adalah salah satu kesalahan desain yang kami buat di awal sejarah Git.
Dan pada 1.7.10 dan yang lebih baru, perintah git merge yang dijalankan dalam sesi interaktif (yaitu input standar dan output standarnya terhubung ke terminal) akan membuka editor sebelum membuat komit untuk merekam hasil penggabungan, untuk memberikan pengguna memiliki kesempatan untuk menjelaskan penggabungan, sama seperti perintah git commit yang dijalankan pengguna setelah menyelesaikan penggabungan yang konflik.
Linus berkata:
Tapi saya tidak begitu peduli bagaimana cara kerjanya - masalah utama saya adalah git membuatnya terlalu mudah untuk memiliki pesan penggabungan yang buruk.
Saya pikir bagian dari itu adalah kebodohan yang bahkan lebih sederhana: kita bahkan tidak pernah menjalankan editor secara default untuk "git merge", tetapi kita melakukannya untuk "git commit
".
Itu adalah kesalahan desain, dan itu berarti bahwa jika Anda ingin benar-benar menambahkan catatan ke penggabungan, Anda harus melakukan pekerjaan ekstra. Jadi orang tidak .
Perhatikan bahwa, sebelum Git 2.17 (Q2 2018), " git rebase -p
" pesan log yang digabungkan dari komit gabungan, yang sekarang sudah diperbaiki.
Lihat komit ed5144d (08 Feb 2018) oleh Gregory Herrero (``) .
Disarankan oleh: Vegard Nossum ( vegard
) , dan Quentin Casasnovas ( casasnovas
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 8b49408 , 27 Feb 2018)
rebase -p
: perbaiki pesan komit yang salah saat menelepongit merge
.Sejak komit dd6fb00 ("
rebase -p
: fix quoting saat memanggilgit merge
", Januari 2018, Git 2.16.0-rc2), pesan komit dari gabungan komit menjadi rebed diteruskan ke perintah gabungan menggunakan mengeksekusi subshell 'git rev-parse --sq-quote
'.Kutipan ganda diperlukan di sekitar subkulit ini sehingga, baris baru disimpan untuk
git merge
perintah.Sebelum tambalan ini, gabungkan pesan berikut:
"Merge mybranch into mynewbranch Awesome commit."
menjadi:
"Merge mybranch into mynewbranch Awesome commit."
setelah a
rebase -p
.
Dengan Git 2.23 (Q2 2019), " merge -c
" instruksi selama " git rebase --rebase-merges
" harus memberi pengguna kesempatan untuk mengedit pesan log, bahkan ketika tidak ada kebutuhan untuk membuat gabungan baru dan mengganti yang sudah ada (yaitu fast-forward saja ), tetapi tidak.
Yang sudah diperbaiki.
Lihat komit 6df8df0 (02 Mei 2019) oleh Phillip Wood ( phillipwood
) .
(Digabung oleh Junio C Hamano - gitster
- di commit c510261 , 13 Jun 2019)
Jawaban bagus lainnya hanya menggunakan perintah primitif - oleh knittl https://stackoverflow.com/a/7599522/94687 :
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
atau perintah rebase akhir yang lebih baik (lebih benar):
git rebase <sha of merge> previous_branch --onto HEAD
BTW, menggunakan perintah primitif mungkin memiliki "fitur" yang bagus untuk tidak mengonsumsi terlalu banyak CPU dan membuat Anda menunggu waktu yang tidak diketahui sampai Git selesai memikirkan daftar komit yang perlu diubah kembali dalam kasus git rebase -p -i HEAD^^^^
(perintah seperti itu yang akan menghasilkan daftar hanya 4 komit terakhir dengan penggabungan sebagai yang terakhir dalam kasus saya dalam kasus saya memakan waktu sekitar 50 detik!).
Untuk versi Git saat ini (Mai 2020):
git rebase -i -r <parent>
,
lalu ganti editor merge -C ...
dengan merge -c ...
.
Ini akan membuka pesan komit di editor selama rebasing, di mana Anda dapat mengubahnya.
(Terima kasih kepada VonC untuk petunjuknya .)
The git rebase -i HEAD~5
perintah muncul editor. Ini daftar komit yang ditentukan (dalam hal ini lima di antaranya). Kolom pertama berisi pick
untuk setiap komit. Cukup ganti pick
dengan reword
di editor itu dan simpan + tutup editor. Kemudian git akan muncul editor untuk setiap komit mana Anda berubah pick
ke reword
dan akan membiarkan Anda mengedit pesan commit.
-p
ke git rebase
perintah.
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to