Membatalkan komit agak menakutkan jika Anda tidak tahu cara kerjanya. Tetapi sebenarnya sangat mudah jika Anda mengerti.
Katakan Anda memilikinya, di mana C adalah KEPALA Anda dan (F) adalah status file Anda.
(F)
A-B-C
↑
master
Anda ingin nuke melakukan C dan tidak pernah melihatnya lagi dan kehilangan semua perubahan dalam file yang dimodifikasi secara lokal . Anda melakukan ini:
git reset --hard HEAD~1
Hasilnya adalah:
(F)
A-B
↑
master
Sekarang B adalah KEPALA. Karena Anda menggunakan --hard
, file Anda disetel ulang ke statusnya di commit B.
Ah, tapi anggap komit C bukan bencana, tapi hanya sedikit. Anda ingin membatalkan komit tetapi simpan perubahan Anda untuk sedikit pengeditan sebelum Anda melakukan komit yang lebih baik. Mulai lagi dari sini, dengan C sebagai KEPALA Anda:
(F)
A-B-C
↑
master
Anda dapat melakukan ini, meninggalkan --hard
:
git reset HEAD~1
Dalam hal ini hasilnya adalah:
(F)
A-B-C
↑
master
Dalam kedua kasus, KEPALA hanyalah penunjuk ke komit terbaru. Ketika Anda melakukan git reset HEAD~1
, Anda memberi tahu Git untuk memindahkan pointer HEAD kembali satu komit. Tetapi (kecuali jika Anda menggunakan --hard
) Anda meninggalkan file Anda seperti sebelumnya. Jadi sekarang git status
tunjukkan perubahan yang Anda periksa ke C. Anda belum kehilangan apa-apa!
Untuk sentuhan paling ringan, Anda bahkan dapat membatalkan komit tetapi meninggalkan file dan indeks Anda :
git reset --soft HEAD~1
Ini tidak hanya meninggalkan file Anda sendiri, bahkan meninggalkan indeks Anda sendiri. Ketika Anda melakukannya git status
, Anda akan melihat bahwa file yang sama ada dalam indeks seperti sebelumnya. Bahkan, tepat setelah perintah ini, Anda bisa melakukannya git commit
dan Anda akan mengulangi komit yang sama yang baru saja Anda miliki.
Satu hal lagi: Misalkan Anda menghancurkan komit seperti pada contoh pertama, tetapi kemudian ternyata Anda membutuhkannya ? Keberuntungan yang berat, bukan?
Tidak, masih ada cara untuk mendapatkannya kembali. Ketik git reflog
dan Anda akan melihat daftar koma (parsial) shas (yaitu, hash) yang telah Anda gunakan. Cari komit yang Anda hancurkan, dan lakukan ini:
git checkout -b someNewBranchName shaYouDestroyed
Anda sekarang telah menghidupkan kembali komit itu. Komit tidak benar-benar dihancurkan di Git selama sekitar 90 hari, jadi Anda biasanya dapat kembali dan menyelamatkan yang tidak ingin Anda singkirkan.