gitresetrevertundoMahir4 mnt baca

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:

bash
# --soft: commit dihapus, perubahan kembali ke staging (aman)
git reset --soft HEAD~1
bash
# --mixed (default): commit dihapus, perubahan kembali ke working directory
git reset --mixed HEAD~1
bash
# --hard: commit dihapus DAN semua perubahan dibuang permanen
git reset --hard HEAD~1

HEAD~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

bash
git revert 3f2a1b9
bash
[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?

SituasiPerintah
Salah commit, belum pushgit reset --soft HEAD~1, perbaiki, commit ulang
Commit tercampur file yang salah, belum pushgit reset --mixed HEAD~1, add ulang
Eksperimen gagal, belum push, ingin bersih totalgit reset --hard HEAD~1
Commit sudah di-push dan dipakai timgit revert <hash>
Ingin batalkan merge yang sudah di-pushgit revert -m 1 <hash-merge>

Membatalkan file yang belum di-commit

Untuk kasus ringan (belum sampai commit), tidak perlu reset:

bash
# kembalikan file ke versi commit terakhir
git restore index.html

# keluarkan file dari staging tapi biarkan perubahannya
git restore --staged index.html

git restore adalah cara modern dan aman untuk dua kebutuhan ini, pengganti git checkout -- <file> yang berbahaya.

Catatan teknis: git reset --hard adalah 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 adalah git reflog yang mencatat pergerakan HEAD selama beberapa minggu terakhir, tapi mengembalikannya butuh usaha. Aturan praktis: sebelum --hard, pastikan git status menunjukkan tidak ada perubahan penting yang belum di-commit, atau simpan dulu dengan git 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.