Sebagai pengguna Git, saya biasa menjumpai situasi tersebut, bahwa saya perlu mengerjakan ulang satu atau lebih komitmen dengan cara yang tidak sesuai --amend
atau rebase -i
dengan komitmen perbaikan. Biasanya saya akan melakukan sesuatu seperti
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Saya menerima pesan komit tersusun yang masuk akal dengan cukup serius. Mereka biasanya berisi teks yang lebih besar dengan referensi & pembenaran untuk perubahan tersebut. Sampai saat ini, saya cukup terganggu dengan proses yang panjang untuk memulihkan pesan komit lama saya melalui proses yang tidak disortir git reflog
, git log
dan salin & tempel.
Apakah ada yang lebih baik untuk mengatasi ini? Dan bagaimana jika saya terdiri lebih dari satu komit?
Sunting: Setelah sedikit memikirkan tentang ini, saya pikir yang saya cari adalah beberapa fungsi seperti git simpanan untuk pesan komit di mana perbaikan / ubah komit tidak sesuai.
sumber
git reset head~1
, bukankah pesan commit lama Anda hanya menjadi entri ke-2 direflog
?gitk
buka saja. Dengan cara itu Anda bahkan tidak perlu menggunakan reflog. Atau, gunakanrev-parse <branch>
untuk mendapatkan hash Anda sebelum reset dan gunakan jawaban ibizaman.Jawaban:
Setelah
git reset
, satu baris ini dapat melakukannya:atau bahkan lebih pendek:
Anda dapat menggunakan opsi lain yang diberikan oleh @ user2718704 .
sumber
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
yang paling jelas.Saat menjalankan perintah "git commit", Anda harus memeriksa opsi berikut,
Untuk menggunakan kembali,
Untuk mengedit saat digunakan kembali,
Untuk mengubah penulis,
sumber
Mengapa mengatur ulang jika Anda dapat meretas, memperbaiki, meretas, dan kemudian menjalankan saja
git commit --amend --no-edit
; dengan demikian, mempertahankan pesan komit asli Anda.Untuk membuatnya bekerja untuk beberapa komit, cukup buat komit sementara dengan perubahan terbaru Anda dan kemudian gunakan rebase interaktif untuk menghentikan komit sebelumnya (berisi pesan komit yang baik) dengan komit sementara yang baru, pertahankan pesan komit dari komit lama.
sumber
fixup
instruksi untuk mendeklarasikan bahwa komit selanjutnya adalah untuk memperbaiki komit sebelumnya dan secara otomatis akan menggunakan pesan komit dari aslinya membuang pesan dari komit perbaikan.rebase -i
. Jangan pernah menggunakannya dalam konteks itu. Untuk kasus yang tersisa seperti menggabungkan kembali jawaban lain lebih sesuai dengan pertanyaan saya, jadi saya tandai sebagai jawaban.Anda dapat mempertimbangkan
git commit --reset-author -c <commit>
, untuk menggunakan kembali pesan komit dengan pengeditan dan waktu saat ini.sumber