Git: edit pesan komit sebelumnya saja


12

Untuk alasan malas saya mendorong banyak komit dengan pesan default dan sekarang sudah menjadi rumit, karena saya tidak benar-benar tahu apa yang telah saya ubah di setiap komit.

Bagaimana cara saya mengedit pesan dari komit sebelumnya dan (jika mungkin) menjaga pohon komit?


10
Waspadalah terhadap perubahan sejarah publik!
D. Ben Knoble

2
Saya khawatir jawaban di sini tidak memberi Anda peringatan yang cukup mengerikan. ini akan membuat kekacauan besar jika ada orang lain yang menarik sejarah Anda sementara itu - semua lebih jika mereka telah melakukan pekerjaan baru di atasnya!
Eevee

Saya akan menggunakannya dengan alasan, saya punya kasus sederhana di sini, saya satu-satunya yang menggunakan repo ini.
Tuyen Pham

3
Info: Ini sudah ditanyakan (mungkin berkali-kali) di Stack Overflow .
user202729

Jawaban:


20

Untuk mengedit pesan komit dari serangkaian komit, saya jalankan

git rebase -i firstsha

di mana firstshapengidentifikasi untuk komit induk dari komit pertama yang ingin saya edit. (Anda dapat menggunakan referensi yang valid di sini, sehingga git rebase -i HEAD~4akan menunjukkan empat komitmen terakhir.)

Di editor yang terbuka, ubah semua entri "pilih" menjadi "reword" pada komit yang ingin Anda modifikasi, lalu tutup editor; Anda kemudian akan diminta untuk memasukkan pesan komit untuk semua komit yang Anda pilih.

Perhatikan bahwa ini akan mengubah pohon komit, karena hash dari commit akan berubah. Anda harus mendorong-paksa pohon baru Anda, atau mendorongnya ke cabang baru. Itu juga akan mengacaukan gabungan, jadi hindari mengedit komit gabungan.

Untuk mengedit hanya komit terakhir dengan cepat, jalankan

git commit --amend

(tapi waspadalah terhadap apapun yang dipentaskan untuk melakukan).


Bagaimana pengaruhnya terhadap pohon komit, apakah akan membuat garis vertikal menengah di pohon komit? Saya hanya memiliki satu pohon komit garis vertikal sekarang, dan lebih dari 100 pesan perlu diubah.
Tuyen Pham

3
Itu tidak akan membuat "baris" baru di pohon komit Anda, itu akan mengubah semua komit. Jika riwayat Anda saat ini linier, itu akan tetap linier.
Stephen Kitt

Tergantung. Apakah Anda menggunakannya sendiri dan tidak mendorong ke server? Maka tidak, hanya satu "baris". Tetapi jika tidak, mungkin ada dua, dan berdasarkan jawaban Anda untuk dua yang pertama kami dapat membantu Anda menyingkirkan "garis" lama.
Kapten Man

1
Rebase memang memiliki bendera untuk menangani penggabungan (saya pikir itu preserve-merges)
D. Ben Knoble

6

Apa yang Anda cari adalah git rebase.

Jika Anda hanya ingin mengubah git commitpesan sebelumnya maka Anda hanya perlu menggunakan yang berikut:

git commit --amend

Dan buat perubahan yang Anda inginkan ke komit sebelumnya dan kemudian simpan hasil edit.

Namun, jika Anda perlu mengubah komitmen lama, Anda perlu menggunakannya rebase.

git rebase -i HEAD~N 

di mana N sama dengan jumlah komit yang ingin Anda kembali, misalnya 2 atau 12 atau 6, dll.

Di sini Anda harus mendapatkan editor teks dengan komit Anda. Ubah opsi dari pickmenjadi reworduntuk mengubah pesan.

Setelah Anda mengidentifikasi semua komitmen yang ingin Anda ubah dan telah secara tepat mengubah opsi mereka, simpan dan tutup editor. Kemudian buat perubahan untuk setiap pesan komit. Setelah puas, Anda dapat menjalankan:

git push --force

Dan Anda harus mempertahankan sejarah git Anda walaupun dengan nilai hash yang berbeda karena Anda telah melakukan perubahan yang diperlukan. Berikut ini beberapa tautan tambahan yang harus Anda periksa:

7.6 Alat Git - Riwayat Penulisan Ulang
Bantuan GitHub - Mengubah Pesan Komit
StackOverflow - Pertanyaan tentang Mengubah pesan komit lama


Jika Anda "reword", Anda tidak perlu " commit --amend", kecuali Anda entah bagaimana mengacaukan proses komit.
Stephen Kitt

Terima kasih, di sini langkah-langkah yang saya akan lakukan sebagai pemahaman saya dari posting Anda: 1. melakukan git rebase -i firstshaitu firstshaadalah orang tua melakukan hash ini dari komit bahwa aku ingin mengubah pesan, maka dalam editor, perubahan pickuntuk reword, enterpesan baru, maka masalah git rebase --continuedan lakukan git push --force?
Tuyen Pham

@StephenKitt, saya baru memperhatikan jawaban Anda, saya membuat jawaban saya ketika Anda mengirimkan jawaban Anda. Saya akan mengikuti saran Anda dan mencari untuk mengeditnya. Jika lebih tepat saya dapat menggabungkan jawaban saya ke dalam jawaban Anda dengan menambahkan tautan ke jawaban Anda jika Anda merasa lebih cocok dengan pertanyaan ini daripada memiliki beberapa jawaban serupa.
kemotep

@TuyenPham, Anda hanya perlu melakukan git rebase -i HEAD~Ndengan N sebagai jumlah komit yang ingin Anda tuju. Ubah setiap opsi komit yang Anda inginkan untuk mengedit pesan dari pickmenjadi reword, simpan file ini, buat perubahan untuk masing-masing file komit tersebut dan simpan itu. Setelah Anda yakin Anda selesai Anda hanya perlu git push --force [Name of git branch you are were working on]. Anda selalu dapat kembali dan melakukan ini lagi atau melakukannya secara bertahap.
kemotep
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.