Saya ingin mengubah pesan komit lebih dalam dalam sejarah dan saya telah mendorong banyak komitmen baru.
Bagaimana cara mengubah pesan komit? Apa itu mungkin?
sumber
Saya ingin mengubah pesan komit lebih dalam dalam sejarah dan saya telah mendorong banyak komitmen baru.
Bagaimana cara mengubah pesan komit? Apa itu mungkin?
Pesan dari Linus Torvalds dapat menjawab pertanyaan Anda:
Jawaban singkat: Anda tidak bisa (jika didorong).
ekstrak (Linus merujuk pada BitKeeper sebagai BK):
Catatan tambahan, hanya karena minat historis: di BK Anda bisa.
Dan jika Anda terbiasa (seperti saya) itu benar-benar sangat praktis. Saya akan menerapkan patch-bom dari Andrew, melihat ada sesuatu yang salah, dan hanya mengeditnya sebelum mendorongnya keluar.
Saya bisa melakukan hal yang sama dengan git. Itu akan cukup mudah untuk membuat pesan komit tidak menjadi bagian dari nama, dan masih menjamin bahwa sejarah tidak tersentuh, dan memungkinkan hal "perbaiki komentar nanti".
Tetapi saya tidak melakukannya.
Sebagian darinya murni "konsistensi internal". Git hanyalah sebuah sistem pembersih berkat semua yang dilindungi SHA1, dan semua objek diperlakukan sama, apa pun jenis objeknya. Ya, ada empat jenis objek, dan semuanya sangat berbeda, dan mereka tidak dapat digunakan dengan cara yang sama, tetapi pada saat yang sama, bahkan jika penyandiannya mungkin berbeda pada disk, secara konsep mereka semua bekerja persis sama.
Tetapi konsistensi internal sebenarnya bukan alasan untuk tidak fleksibel, dan jelas itu akan sangat fleksibel jika kita bisa memperbaiki kesalahan setelah itu terjadi. Jadi itu bukan argumen yang sangat kuat.
The nyata Alasan git tidak memungkinkan Anda untuk mengubah pesan komit ujung menjadi sangat sederhana: bahwa cara, Anda dapat mempercayai pesan. Jika Anda mengizinkan orang untuk mengubahnya setelah itu, pesan-pesannya secara inheren tidak terlalu dapat dipercaya.
Agar lengkap, Anda dapat menulis ulang riwayat komit lokal Anda untuk mencerminkan apa yang Anda inginkan, seperti yang disarankan oleh sykora (dengan beberapa rebase dan reset --hard, terkesiap!)
Namun, begitu Anda menerbitkan riwayat revisi Anda lagi (dengan git push origin +master:master
, +
tanda yang memaksa terjadi, bahkan jika itu tidak menghasilkan komit "maju cepat") ... Anda mungkin akan mendapat masalah .
Ekstrak dari pertanyaan SO lainnya ini:
Saya sebenarnya pernah didorong dengan repositori --force ke git.git dan dimarahi oleh Linus BIG TIME. Ini akan menciptakan banyak masalah bagi orang lain. Jawaban sederhana adalah "jangan lakukan itu".
Saat ini git ganti mungkin melakukan trik.
Secara detail: Buat cabang kerja sementara
Setel ulang ke komit untuk menggantikan
Ubah komit dengan pesan yang benar
Ganti komit lama dengan yang baru
kembali ke cabang di mana kamu berada
menghapus cabang temp
Dorong
selesai
sumber
Kamu bisa memakai
git rebase -i
(melawan cabang tempat Anda bercabang) 'i' untuk interaktif.Ganti
pick
komentar komit yang ingin Anda ubah denganr
(ataureword
), simpan dan keluar dan setelah melakukannya Anda akan dapat mengedit.git push
sekali lagi dan kamu selesai!sumber
-p
argumen penggabungan cadanganrebase
manap
.Misalkan Anda memiliki pohon seperti ini:
Pertama,
checkout
cabang temp:Di
temp
cabang,reset --hard
ke komit yang ingin Anda ubah pesannya (misalnya, komit itu adalah946992
):Gunakan
amend
untuk mengubah pesan:Setelah itu pohon akan terlihat seperti ini:
Lalu,
cherry-pick
semua komit yang ada di depan946992
darimaster
ketemp
dan komit mereka, gunakanamend
jika Anda ingin mengubah pesan mereka juga:Pohon itu sekarang terlihat seperti ini:
Sekarang paksa dorong temp temp branch ke jarak jauh:
Langkah terakhir, hapus cabang
master
di lokal,git fetch origin
untuk menarik cabangmaster
dari server, lalu beralih ke cabangmaster
dan hapus cabangtemp
.Sekarang baik lokal maupun jarak jauh Anda akan memperbarui semua pesan.
sumber
Di toko kami, saya memperkenalkan konvensi penambahan tag beranotasi yang dapat dikenali untuk melakukan pesan yang salah, dan menggunakan anotasi sebagai penggantinya.
Meskipun ini tidak membantu orang-orang yang menjalankan perintah "git log" biasa, itu memberi kami cara untuk memperbaiki referensi pelacak bug yang salah dalam komentar, dan semua alat membangun dan melepaskan saya memahami konvensi.
Ini jelas bukan jawaban umum, tetapi mungkin sesuatu yang dapat diadopsi orang dalam komunitas tertentu. Saya yakin jika ini digunakan dalam skala yang lebih besar, semacam dukungan porselen untuk itu mungkin muncul, akhirnya ...
sumber
(Dari http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Saya pikir itu harus menjawab pertanyaan Anda. Namun, perhatikan bahwa jika Anda telah mendorong kode ke repositori jarak jauh dan orang-orang telah menariknya, maka ini akan mengacaukan sejarah kode mereka, serta pekerjaan yang telah mereka lakukan. Jadi lakukan dengan hati-hati.
sumber
Jika Anda menggunakan Git Extensions: masuk ke layar Commit, harus ada kotak centang yang mengatakan "Amend Commit" di bagian bawah, seperti yang dapat dilihat di bawah:
sumber