Reset vs Revert: Membatalkan dengan Aman
Beda git reset --soft, --mixed, --hard dan git revert, plus aturan kapan masing-masing boleh dipakai.
Dua cara membatalkan, untuk dua situasi berbeda
Cepat atau lambat kamu akan ingin membatalkan sesuatu: commit yang salah isi, commit yang tidak sengaja ke-push, atau eksperimen yang gagal total. Git punya dua alat:
git reset: menghapus commit dari riwayat. Untuk commit yang belum dibagikan ke orang lain.git revert: membuat commit baru yang membatalkan isi commit lama. Untuk commit yang sudah di-push dan dipakai orang lain.
Aturan emasnya: riwayat yang sudah dibagikan (push) jangan ditulis ulang, hanya boleh ditambah. Itulah kenapa dua perintah ini ada.
git reset dan tiga modenya
Reset memindahkan penanda branch ke commit lain. Tiga mode menentukan apa yang terjadi pada perubahanmu:
# --soft: commit dihapus, perubahan kembali ke staging (aman)
git reset --soft HEAD~1# --mixed (default): commit dihapus, perubahan kembali ke working directory
git reset --mixed HEAD~1# --hard: commit dihapus DAN semua perubahan dibuang permanen
git reset --hard HEAD~1HEAD~1 artinya "satu commit ke belakang dari posisi sekarang". Contoh kapan masing-masing dipakai:
- --soft: commit terakhir salah pesan atau tercampur dua hal. Reset soft, perbaiki staging, commit ulang dengan benar.
- --mixed: ingin mengulang commit dari awal (misalnya salah pilih file). Perubahan tetap ada di folder, tinggal add dan commit ulang.
- --hard: eksperimen gagal total dan kamu ingin kembali bersih ke commit terakhir. Semua perubahan yang belum di-commit ikut hilang.
git revert: cara aman untuk riwayat publik
git revert 3f2a1b9[main 9d8e7f6] Revert "Tambah fitur yang ternyata bug"
1 file changed, 10 deletions(-)Bukannya menghapus commit 3f2a1b9, Git membuat commit baru yang isinya kebalikan dari commit tersebut. Riwayat tetap utuh dan jujur: semua orang bisa melihat bahwa commit itu pernah ada lalu dibatalkan. Inilah yang membuat revert aman dipakai di branch bersama setelah push.
Kapan pakai yang mana?
| Situasi | Perintah |
|---|---|
| Salah commit, belum push | git reset --soft HEAD~1, perbaiki, commit ulang |
| Commit tercampur file yang salah, belum push | git reset --mixed HEAD~1, add ulang |
| Eksperimen gagal, belum push, ingin bersih total | git reset --hard HEAD~1 |
| Commit sudah di-push dan dipakai tim | git revert <hash> |
| Ingin batalkan merge yang sudah di-push | git revert -m 1 <hash-merge> |
Membatalkan file yang belum di-commit
Untuk kasus ringan (belum sampai commit), tidak perlu reset:
# kembalikan file ke versi commit terakhir
git restore index.html
# keluarkan file dari staging tapi biarkan perubahannya
git restore --staged index.htmlgit restore adalah cara modern dan aman untuk dua kebutuhan ini, pengganti git checkout -- <file> yang berbahaya.
Catatan teknis:
git reset --hardadalah salah satu perintah paling destruktif di Git: perubahan yang dibuang tidak masuk tempat sampah dan tidak bisa di-undo lewat Git biasa. Satu-satunya penyelamat adalahgit reflogyang mencatat pergerakan HEAD selama beberapa minggu terakhir, tapi mengembalikannya butuh usaha. Aturan praktis: sebelum--hard, pastikangit statusmenunjukkan tidak ada perubahan penting yang belum di-commit, atau simpan dulu dengangit stash.
Ringkasan
Belum push: reset (soft/mixed untuk perbaiki, hard untuk buang total). Sudah push: revert yang menambah commit pembatal. Hafalkan tabel di atas dan kamu tidak akan pernah panik lagi saat salah commit.