Magit - Undo commit terakhir - Manipulasi Sejarah

12

Pertanyaan StackOverflow ini memiliki solusi / pendekatan terbaik untuk membatalkan komitmen terakhir.

Saya mulai menggunakan Magit beberapa minggu yang lalu dan setelah melihat semua dokumentasinya, saya masih belum memiliki cara terbaik / pasti untuk membatalkan perubahan yang dilakukan secara salah.

Misalnya:
Untuk membatalkan dan mengulang komit terakhir yang dapat kita gunakan:

$ git commit -m "Something terribly misguided"
$ git reset HEAD~
<< edit files as necessary >>
$ git add ... 
$ git commit -c ORIG_HEAD # To keep the same commit message

Apa yang seharusnya menjadi alur kerja terbaik untuk mereproduksi prosedur ini menggunakan Magit ?

Alexandro de Oliveira
sumber

Jawaban:

17

Anda dapat menggunakan magit-reset(terikat secara default ke x). Komit pada titik akan digunakan sebagai default untuk prompt, tetapi Anda dapat memasukkan nilai revisi apa pun yang Anda inginkan ("HEAD ~" di sini).

Perintah pengaturan ulang dijelaskan di bagian "Pengaturan Ulang" dari manual: https://magit.vc/manual/magit/Resetting.html

Untuk menggunakan kembali pesan komit, Anda dapat menggunakan =Copsi di popup komit. Tanpa sengaja, prompt saat ini tidak menawarkan nilai penyelesaian apa pun (saya pikir ini mungkin paling tidak menawarkan ORIG_HEAD), tetapi sebelum mengatur ulang Anda dapat meletakkan hash dari commit saat ini di cincin bunuh (mis., Dengan C-wpada baris "Head:" buffer status) dan kemudian, setelah mengatur ulang, tarik sebagai nilai untuk =Copsi.


Beberapa komentar tambahan:

  • Alih-alih menggunakan =C, Anda mungkin merasa lebih nyaman untuk memulai komit ( cc) dan kemudian menggunakan git-commit-prev-message ( M-p) untuk menelusuri pesan-pesan sebelumnya.

  • Jika Anda hanya memodifikasi komit terakhir, Anda dapat menempel pada perubahan bertahap ke komit sebelumnya dengan magit-commit-amend ( ca) atau magit-commit-extend( ce). (Yang terakhir menggunakan kembali pesan komit, melewati buffer COMMIT_EDITMSG.)

Kyle Meyer
sumber