Bagaimana saya menghentikan komit Git ketika VI ada di layar menunggu pesan komit?

203

Saya telah meminta Git untuk melakukan commit dari dalam git bash, Ini telah memunculkan VI seperti biasa.

Saya sekarang ingin membatalkan komit, bagaimana saya mencegah melanjutkan komit dari titik ini?

Ben Aston
sumber
Layak menambahkan bahwa Anda harus menggunakan Esc sebelum masuk :q!untuk keluar dari vim.
M_Merciless

Jawaban:

332

Anda memiliki dua opsi:

  • Berikan pesan komit kosong. Jika ini adalah komit baru dan Anda belum menyimpan pesan itu, Anda dapat menggunakan :q!(berhenti tanpa menyimpan). Jika Anda sudah menyimpan (atau Anda mengubah komit sebelumnya), cukup hapus seluruh pesan log dan simpan lagi. Ini dapat dilakukan dengan ggdG+ :wqdi Vim.

  • Minta editor keluar dengan kode keluar bukan nol. Di Vim, Anda dapat menggunakan :cq(keluar dengan kode kesalahan).

Perlu dicatat bahwa Anda selalu dapat mengatur ulang copy pekerjaan Anda ke keadaan sebelum komit dengannya git reset HEAD^.

Eugene Yarmash
sumber
96
: cq adalah bisnis. Untuk beberapa alasan git bajak, terlepas dari apakah saya menggunakan: q!
Sirex
2
git reset HEAD ^ akan membuang modifikasi lokal
juanmf
2
: q! mungkin tidak berfungsi karena sudah ada pesan yang telah ditentukan sebelumnya, Anda hanya mengeditnya.
Papipo
Hiccup: Jika git reset HEAD^meminta lebih, shell Anda dapat menafsirkan ^ sebagai kelanjutan garis. Coba git reset "HEAD^",, git reset HEAD^^atau git reset HEAD~1sebaliknya, per jawaban ini: stackoverflow.com/questions/14203952/git-reset-asks-more
Jake Stevens-Haas
76
  • :q!tidak berfungsi saat mengubah komit. Itu tidak memperbarui pesan komit, tetapi mengeksekusi amandemen :-(
  • :cq sepenuhnya membatalkan amandemen.
Daniel Pinyol
sumber
1
Saya berharap dapat menambahkan +1 lainnya. Saya sudah di sini banyak waktu ketika amandemen saya mengambil komit yang salah.
Wyrmwood
8

Untuk menyimpulkan:

  • Saat membuat komit baru (yaitu git commit) berhenti menggunakan :q!.
  • Ketika mengubah (yaitu git commit --amend) menghapus pesan komit (hanya beberapa baris pertama yang tidak dimulai dengan #) misalnya dengan menahan v dan menggunakan tombol panah untuk memilihnya lalu menekan Hapus. Berhenti dengan :wqmenerapkan perubahan ! Jika Anda menggunakan :q!perubahan akan hilang dan pesan komit sebelumnya akan digunakan.

Saat menggunakan VIM tidak masalah dalam kedua kasus untuk berhenti dengan :cq- VIM akan berhenti dengan kode kesalahan dan komit akan dibatalkan.

Maciej Piekarski
sumber