Saya telah membuat git melakukan commit dan dorongan berikutnya. Saya ingin mengubah pesan komit. Jika saya mengerti dengan benar, ini tidak disarankan karena seseorang mungkin telah menarik dari repositori jarak jauh sebelum saya membuat perubahan seperti itu. Bagaimana jika saya tahu tidak ada yang menarik?
Apakah ada cara untuk melakukan ini?
Jawaban:
Mengubah sejarah
Jika ini adalah komit terbaru, Anda bisa melakukan ini:
Ini memunculkan editor dengan pesan komit terakhir dan memungkinkan Anda mengedit pesan. (Anda dapat menggunakan
-m
jika Anda ingin menghapus pesan lama dan menggunakan yang baru.)Mendorong
Dan kemudian ketika Anda mendorong, lakukan ini:
Atau Anda dapat menggunakan "+":
Atau Anda dapat menggunakan
--force
:Hati-hati saat menggunakan perintah ini.
Jika orang lain mendorong perubahan ke cabang yang sama, Anda mungkin ingin menghindari menghancurkan perubahan itu. The
--force-with-lease
pilihan adalah yang paling aman, karena akan membatalkan jika ada perubahan hulu (Jika Anda tidak menentukan cabang secara eksplisit, Git akan menggunakan pengaturan push standar. Jika pengaturan push standar Anda adalah "cocok", maka Anda dapat menghancurkan perubahan pada beberapa cabang secara bersamaan.
Menarik / mengambil sesudahnya
Siapa pun yang sudah menarik sekarang akan mendapatkan pesan kesalahan, dan mereka harus memperbarui (dengan asumsi mereka tidak melakukan perubahan apa pun sendiri) dengan melakukan sesuatu seperti ini:
Hati-hati saat menggunakan
reset --hard
. Jika Anda memiliki perubahan pada cabang, perubahan itu akan dihancurkan.Catatan tentang memodifikasi riwayat
Data yang dihancurkan benar-benar hanya pesan komit lama, tetapi
--force
tidak tahu itu, dan dengan senang hati akan menghapus data lain juga. Jadi anggap--force
sebagai "Saya ingin menghancurkan data, dan saya tahu pasti data apa yang sedang dihancurkan." Tetapi ketika data yang dihancurkan dilakukan, Anda sering dapat memulihkan komit lama dari reflog — data tersebut sebenarnya yatim piatu, bukan hancur (meskipun komit yatim dihapus secara berkala).Jika Anda tidak berpikir Anda menghancurkan data, maka menjauhlah dari
--force
... hal-hal buruk mungkin terjadi .Inilah sebabnya mengapa
--force-with-lease
agak lebih aman.sumber
git push --force
tanpa opsi <repositori> dan <branch> juga berfungsi, jika Anda mengatur upstream Anda.<repository>
? Apakah ituorigin
?org/repo
? Atau adilrepo
?Hanya mengatakan :
lalu
sumber
git push origin <BRANCH-NAME>
tidak berhasil, saya harus menggunakangit push --force
seperti yang dijelaskan dalam jawaban yang diterima.git push --force
, atau dorongan itu tidak melewati.Untuk mengedit komit selain yang terbaru:
Langkah1 :
git rebase -i HEAD~n
untuk melakukan rebase interaktif untukn
komit terakhir yang terpengaruh. (yaitu jika Anda ingin mengubah pesan komit 3 kembali, lakukangit rebase -i HEAD~3
)git akan memunculkan editor untuk menangani komit itu, perhatikan perintah ini:
itulah tepatnya yang kita butuhkan!
Langkah2 : Ubah
pick
ker
untuk komitmen yang ingin Anda perbarui pesan. Jangan repot-repot mengubah pesan komit di sini, itu akan diabaikan. Anda akan melakukannya pada langkah berikutnya. Simpan dan tutup editor.Perhatikan bahwa jika Anda mengedit 'paket' rebase Anda namun itu tidak memulai proses membiarkan Anda mengubah nama file, jalankan:
Jika Anda ingin mengubah editor teks yang digunakan untuk sesi interaktif (mis. Dari default vi ke nano), jalankan:
Langkah 3 : Git akan memunculkan editor lain untuk setiap revisi yang Anda masukkan
r
sebelumnya. Perbarui pesan komit sesuka Anda, lalu simpan dan tutup editor.Langkah4 : Setelah semua komit, pesan diperbarui. Anda mungkin ingin lakukan
git push -f
untuk memperbarui remote.sumber
git rebase -i HEAD~3
git rebase --continue
. Dan jika Anda ingin mengubah editor teks yang digunakan untuk sesi interaktif (mis. Dari defaultvi
kenano
), jalankanGIT_EDITOR=nano git rebase -i HEAD~n
.Gunakan dua langkah ini di konsol:
lalu
Selesai :)
sumber
Perlu dicatat bahwa jika Anda menggunakan
push --force
dengan referensi mutiple, mereka SEMUA akan dimodifikasi sebagai hasilnya. Pastikan untuk memperhatikan di mana repo git Anda dikonfigurasi untuk mendorong ke. Untungnya ada sedikit cara untuk menjaga prosesnya, dengan menetapkan satu cabang untuk diperbarui. Baca dari halaman git man:sumber
Jika Anda ingin memodifikasi lebih tua komit, bukan yang terakhir, Anda akan perlu menggunakan
rebase
perintah seperti yang dijelaskan di sini, Github halaman bantuan , pada Mengamandemen pesan yang lebih tua atau beberapa pesan komit bagiansumber
Perintah 1 .
Kemudian,
Perintah 2 .
sumber
kemudian edit dan ubah pesan di jendela saat ini. Setelah itu lakukan
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 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 seperti 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
git commit -m “fixed feature A”
(Mari kita asumsikan git memberikan ini ID komit dari e3ab7312 ... ... (kemudian Anda menyadari pesan Anda salah, jadi sekarang buat perubahan yang tidak penting pada file seperti menambahkan spasi ke file readme, atau gunakan—allow-empty
opsi git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' 'git notes
Ini akan melayani tujuan yang sama dengan "errata commit". Cukup tambahkan catatan ke komit sebelumnya untuk membubuhi keterangan atau memperbaiki kesalahan dalam pesan komit:https://git-scm.com/docs/git-notes
Ini bekerja dengan baik untuk saya,
git checkout asal / nama cabang
jika Anda sudah berada di cabang maka lebih baik melakukan tarik atau rebase
atau
Nanti Anda cukup menggunakan
atau jika Anda ingin membuka editor teks maka gunakan
Saya akan lebih suka menggunakan editor teks jika Anda memiliki banyak komentar. Anda dapat mengatur editor teks pilihan Anda dengan perintah
Bagaimanapun, ketika Anda selesai mengubah pesan komit, simpan dan keluar
dan kemudian jalankan
Dan kamu sudah selesai
sumber
informasi tambahan untuk masalah yang sama jika Anda menggunakan pipa bitbucket
edit pesan Anda
dorong ke bagian
kemudian tambahkan --force ke perintah push Anda di pipa
Ini akan menghapus komit Anda sebelumnya dan mendorong komit Anda saat ini.
Saya mencobanya pada pipa bitbucket dan berfungsi dengan baik
sumber