Apakah ada cara untuk mengedit pesan komit setelah melakukan dan mendorong ke GitHub? Saya melihat bahwa ada 'tambahkan catatan' serta komentar inline, tetapi tidak ada pengeditan aktual dari pesan komit. Ada juga 'amit commit' di ekstensi git tetapi itu tidak mengedit pesan yang ada.
129
Jawaban:
git rebase -i <commit hash you want to change>^
Ini akan membuka editor default Anda (biasanya vi ) dengan daftar commit dan tindakan untuk masing-masing. Secara default, tindakannya adalah
pick
.Untuk komitmen apa pun yang ingin Anda ubah pesannya, ubah
pick
kereword
.Simpan dan keluar (in vi:)
:wq
.Untuk setiap komit tersebut, Anda akan mendapatkan editor untuk mengedit pesan komit. Ubah sesuai keinginan Anda, simpan dan keluar.
Setelah selesai mengedit semua pesan komit, Anda akan kembali ke command prompt, dan memiliki pohon baru dengan pesan yang diperbarui.
Anda sekarang dapat mengunggahnya ke github dengan menggunakan
git push origin --force
.Jika Anda hanya perlu memperbaiki komit terakhir Anda, Anda dapat mengganti langkah 1-4 dengan
git commit --amend
.sumber
^
sana - saya memang menyarankan rebasing pada induk dari komit yang ingin Anda ubah.^^
untuk mengakhiri perintah dengan^
misalnya literal :git rebase -i 2c747b32^^
Di Intellij Idea Anda dapat melakukannya dengan mudah.
sumber
git push origin --force
setelah itu seperti yang disarankan dalam jawaban @ Mureinik.Tempat:
jika git-grafik Anda terlihat seperti ...
(
df9c192
danb7ec061
hash komit dari target-commit dan parent-commit, secara terpisah)Larutan:
Anda cukup mengetik instruksi berikut ...
Penjelasan:
git reset --soft b7ec061
akan menyimpan perubahan file Anda dan mengatur ulang ke parent-commit (mis. b7ec061)git commit -m "..."
akan membuat komit baru secara lokalgit push -f
akan mendorong komit baru Anda ke server dan mengganti yang lama (mis. df9c192)sumber
Pilihan lain adalah membuat "errata commit" tambahan (dan mendorong) yang mereferensikan objek komit yang berisi kesalahan - komit errata baru juga menyediakan koreksi. Komit errata adalah komit tanpa perubahan kode substantif tetapi pesan komit penting - misalnya, tambahkan satu karakter spasi ke file readme Anda dan komit perubahan itu dengan pesan komit penting, atau gunakan opsi git
--allow-empty
. Ini tentu saja lebih mudah dan lebih aman daripada rebasing, itu tidak mengubah sejarah yang sebenarnya, dan itu membuat pohon cabang bersih (menggunakanamend
juga merupakan pilihan yang baik jika Anda mengoreksi komit terbaru, tetapi komit errata mungkin merupakan pilihan yang baik untuk komit yang lebih lama). Hal semacam ini sangat jarang terjadi sehingga hanya mendokumentasikan kesalahan sudah cukup baik. Di masa mendatang, jika Anda perlu mencari melalui git log untuk kata kunci fitur, komit asli (keliru) tidak boleh muncul karena kata kunci yang salah digunakan dalam komit asli (kesalahan ketik asli) - namun, kata kunci akan muncul di komit errata yang kemudian akan mengarahkan Anda ke komit asli yang memiliki kesalahan ketik. Ini sebuah contoh:sumber
Jawaban @Mureinik bagus tapi tidak bisa dimengerti oleh pemula.
Metode pertama:
git commit --amend
, Anda akan melihat:pick
, ini sudah menjadi halaman edit dan Anda dapat langsung mengedit pesan teratas dan menyimpan & keluar , mis .:git push -u origin master --force
atau<how you push normally> --force
. Kuncinya di sini adalah--force
.Metode kedua:
Anda dapat melihat hash komit oleh
git log
atau mengekstrak dari url repositori, contoh dalam kasus saya adalah881129d771219cfa29e6f6c2205851a2994a8835
Maka Anda dapat melakukan
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
ataugit rebase -i HEAD^
(jika terbaru)Anda akan melihat:
noop
maka Anda mungkin salah mengetik, mis. Jika Anda melakukangit rebase -i 881129d771219cfa29e6f6c2205851a2994a88
yang hilang^
pada akhirnya, Anda lebih baik keluar dari editor tanpa menyimpan dan mencari tahu alasannya:noop
masalah, maka cukup mengubah katapick
untukreword
, lain hanya tetap (Anda tidak mengedit pesan commit pada saat ini), misalnya:git push -u origin master --force
atau<how you push normally> --force
. Kuncinya di sini adalah--force
.Untuk info lebih lanjut silakan baca dokumen .
sumber