Iya. Tulis pesan komit ke file yang berbeda ( :w /some/other/path.txt
). Kemudian keluar dari editor tanpa menyimpan ( :q!
). Jika sebelumnya Anda menyimpan file ke jalur aslinya, hapus semuanya dan tulis file kosong terlebih dahulu (pesan komit kosong akan membatalkan komit).
Sekarang, ketika Anda siap untuk melakukan "untuk real", gunakan file pesan yang Anda simpan di jalur alternatif.
Bergantian, salin pesan komit ke salah satu buffer vim.
Perlu dicatat bahwa Anda benar-benar tidak perlu melakukan ini sama sekali : commit --amend
memungkinkan Anda mengubah komit setelah dibuat, jadi solusi mudahnya adalah menghasilkan komit dengan apa yang Anda miliki dan kemudian memperbaikinya sebelum mendorong. Anda bahkan bisa menyelesaikan komit dalam kondisi rusak, reset HEAD~
(mengatur ulang Anda ke status copy pekerjaan Anda sebelum komit), memperbaiki copy pekerjaan Anda, dan kemudian commit -a -c HEAD@{1}
menggunakan pesan komit lama.
write the empty file (an empty commit message will abort the commit)
sebagian bekerja seperti pesona, terima kasih!Jika editor Anda dapat keluar dengan kode kesalahan - Git akan membatalkan komit. Saat menggunakan VIM, ketikkan
untuk keluar dengan kode kesalahan non-nol dan batalkan komit.
sumber
commit --amend
karena Anda harus menghapus pesan komit yang ada dan:wq
.git commit --amend
alih - alihgit rebase --continue
saat rebase.Jika Anda telah membuka vim untuk menulis pesan komit Anda, hapus saja baris yang tidak dimulai dengan # dan git akan membatalkan komit Anda
sumber
ggdG
akan memotong semua konten pesan, maka lain kali Anda menjalankannya,vim
Anda bisa hanyaP
teks yang Anda potong sebelumnya.Meskipun Anda dapat membatalkan komit, pendekatan lain adalah mengubah komit sesudahnya. Cukup komit pekerjaan Anda saat ini, kemudian buat perubahan tambahan apa pun yang Anda inginkan
git add
, lalu jalankangit commit --amend
. Anda akan ditempatkan kembali ke dalam editor pesan komit, dan ketika Anda menyimpan, komit tersebut akan diamandemen untuk menyertakan perubahan tambahan dan pesan komit baru Anda.sumber
Iya itu mungkin. Untuk melakukan komit, editor Anda HARUS menulis pesan komit ke file
.git/COMMIT_EDITMSG
dan keluar dengan kode status 0.Jadi jika Anda menggunakan VI / VIM, Anda mungkin ingin melakukan yang berikut ...
:w
(secara default ini akan menyimpan konten saat ini ke.git/COMMIT_EDITMSG
):cq
git commit -eF .git/COMMIT_MESSAGE
The
-F /path/to/file
akan mengisi editor dengan konten yang diberikan dari / path / ke / file. Namun, secara default ini akan langsung melakukan komit, kecuali jika Anda memberikan-e
bendera tambahan untuk mengedit .sumber
/foo/bar/
direktori, relatif dari root proyek) sepertigit commit -eF ../../.git/COMMIT_MESSAGE
:w
lakukan:sav committmp
dangit commit -eF committmp
Saya biasanya membuat komitmen dengan
IntelliJ
menggunakan terminal yang disediakan. Sayangnya komit saya manual:git commit -m'my message' // etc
jadi satu-satunya hal yang saya pikir aman untuk dilakukan hanyalah menutup jendela terminal! Sorot teks Anda jika Anda ingin menyimpannya, lalu salin, lalu tutup jendela terminal.
sumber
jawaban @bdonlan baik untuk pertanyaan ini, tetapi saya akan menunjukkan situasi di mana Anda mungkin menginginkan solusi yang lebih baik.
Katakanlah Anda ingin menambahkan perubahan ke komit terakhir. Jadi Anda lakukan seperti yang disarankan @bdolan:
Bayangkan saat menulis pesan baru, Anda menyesal menambahkan file-file itu ke komit itu. Masalahnya adalah Anda terjebak dengan pesan komit yang sudah disimpan dan keluar dari editor (dengan atau tanpa menyimpan) akan menambahkan perubahan itu ke komit terakhir. Mengembalikan ke titik Anda sebelumnya sebelum tindakan ini mengharuskan Anda untuk membagi komit terakhir - saya yakin Anda ingin menghindarinya.
Caranya adalah dengan menyimpan dan keluar dari editor sementara itu hanya memiliki garis yang dimulai dengan
#
atau tanpa garis sama sekali. Ketika Anda keluar, Anda akan disambut dengan pesan:Dan Anda belum mengubah komit terakhir sama sekali.
sumber
git commit; vim ....; git commit --amend; git reset HEAD@{1}
. Yaitu: jika saya ingin "membatalkan" amandemen, maka saya tidak perlu membagi komit sebelumnya. objek komit yang HEAD sebelum diubah disimpan sebagaiHEAD@{1}
. Selain itu, zetta sudah menyarankan untuk menghapus semua baris non-komentar.