Belajar Git - Penjelajahan Waktu & Pembatalan Perubahan (Undoing Changes)
Episode 14 of 21

Belajar Git - Penjelajahan Waktu & Pembatalan Perubahan (Undoing Changes)

Kuasai cara membatalkan perubahan di Git: git restore untuk file dan staging area, git revert untuk membatalkan commit dengan aman, serta git reset untuk memindahkan HEAD dengan tiga mode soft, mixed, dan hard beserta risikonya.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 13 kita mengamankan repository dari insiden. Kini giliran insiden yang lebih umum: kesalahan kecil setiap hari — salah edit file, salah stage, atau salah commit. Kabar baiknya, Git adalah mesin waktu: hampir semua keputusan bisa dibatalkan selama kalian tahu alat yang tepat. Kabar buruknya, alat yang salah bisa menghancurkan pekerjaan.

Kuncinya adalah memahami di area mana perubahan berada. Ingat kembali tiga area dari episode 2: working directory (tempat mengedit), staging area (tempat menampung sebelum commit), dan repository (history commit). Setiap perintah pembatalan bekerja di area tertentu — memilih perintah yang salah seperti memutar waktu di masa yang salah.

Membatalkan Perubahan di Working Directory

Perubahan yang belum di-stage — belum pernah lewat git add — bisa dibatalkan dengan git restore <file>. Perintah ini mengembalikan isi file ke kondisi commit terakhir (atau HEAD).

Batalkan edit yang belum di-stage
git restore src/utils/login.ts
git status

Setelah perintah di atas, file src/utils/login.ts kembali ke versi commit terakhir dan hilang dari daftar modified.

Warning

git restore <file> menimpa file tanpa konfirmasi dan perubahan yang dibatalkan tidak bisa diambil kembali — tidak seperti commit yang masih bisa di-recover lewat reflog. Pastikan benar-benar tidak membutuhkan perubahan itu sebelum menjalankannya.

Mengeluarkan File dari Staging Area

Jika perubahan sudah terlanjur di-git add tapi belum di-commit, keluarkan dengan git restore --staged <file>. Perubahan tetap ada di working directory, hanya lepas dari staging:

Unstage file tanpa menghapus perubahan
git restore --staged src/utils/login.ts
git status

Perhatikan hasil git status: file kini berada di daftar "Changes not staged" — isinya tetap, hanya staging yang dikosongkan. Ini kebalikan dari git add, dan merupakan pengganti modern dari git reset HEAD <file> yang dulu populer.

Membatalkan Commit dengan git revert

Kesalahan yang sudah ter-commit adalah level berikutnya. Dua perintah utama: git revert dan git reset. Mulai dari yang paling aman.

git revert <hash> membuat commit baru yang isinya membalik perubahan commit lama. History tidak ditulis ulang — hanya ditambah. Karena itu ia aman untuk branch publik yang dipakai tim (ingat golden rule di episode 7: jangan menulis ulang history publik).

Revert commit yang sudah ter-push
git revert 9f3b2c1
git log --oneline -4

Sekarang log berisi commit Revert "..." sebagai anak terakhir — semua commit lain tetap utuh. Kode rekan kerja yang sudah menarik branch ini tidak akan konflik.

Memindahkan HEAD dengan git reset

git reset <hash> memindahkan pointer branch (HEAD) mundur ke commit tertentu, seolah-olah commit setelahnya "tidak pernah terjadi". Ini mengubah history, sehingga hanya untuk branch lokal yang belum di-push. Tiga mode menentukan nasib perubahan:

Tiga mode git reset
git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1

Perbedaannya terletak pada apa yang terjadi pada staging area dan working directory:

ModeHEADStaging AreaWorking Directory
--softMundurPerubahan tetap di-stagePerubahan tetap utuh
--mixed (default)MundurDikosongkanPerubahan tetap utuh
--hardMundurDikosongkanPerubahan dihapus

Warning

git reset --hard menghancurkan perubahan secara permanen — staging dan working directory dikosongkan tanpa ampun. Hanya gunakan pada commit lokal yang benar-benar ingin dibuang, dan jangan pernah pada branch publik. Untuk membatalkan commit publik, selalu git revert.

Karena --mixed adalah default, git reset <hash> saja cukup untuk meng-undo commit terakhir sambil mempertahankan perubahannya di working directory — lalu kalian bisa memilah ulang mana yang ingin di-commit.

Membatalkan Beberapa Commit Sekaligus

Saat beberapa commit berturut-turut harus dibatalkan, kombinasikan dengan rentang HEAD~N:

Gabungkan tiga commit terakhir
git reset --soft HEAD~3
git status
git commit -m "feat: gabungkan tiga commit menjadi satu"

Sedangkan untuk revert beberapa commit sekaligus, jalankan git revert satu per satu dari yang paling baru ke yang paling lama, atau gunakan rentang: git revert <hash-awal>^..<hash-akhir>. Ingat kembali aturannya: reset hanya untuk branch lokal yang belum dibagikan; revert untuk history yang sudah ter-push dan dipakai tim.

Tabel Perbandingan

Ringkasan lengkap kapan memakai perintah mana:

PerintahTargetMembuat Commit BaruAman untuk Branch PublikPenggunaan
git restore <file>Working directoryTidakYaBatalkan edit file
git restore --staged <file>Staging areaTidakYaUnstage file
git revert <hash>HistoryYaYaBatalkan commit lama
git reset <hash>HistoryTidakTidakPindah HEAD mundur

Tip

Aturan praktis: belum di-commitgit restore; sudah di-push dan dipakai timgit revert; commit lokal yang belum di-pushgit reset. Kalau tidak yakin apakah branch dipakai orang lain, anggap saja publik dan pilih git revert.

Kehilangan commit karena git reset bukan akhir dunia: git reflog mencatat semua pergerakan HEAD dan bisa memulihkan commit yang "terhapus" — akan kita bedah tuntas di episode 17.

Penutup

Episode ini memberi kalian mesin waktu Git yang aman: git restore <file> membatalkan edit di working directory, git restore --staged <file> mengeluarkan file dari staging tanpa menghapus perubahan, git revert <hash> membatalkan commit dengan membuat commit baru yang aman untuk branch publik, dan git reset <hash> memindahkan HEAD dengan tiga mode soft, mixed, dan hard.

Poin yang harus kalian bawa:

  • Pahami dulu di area mana perubahan berada sebelum memilih perintah.
  • git revert aman untuk history publik; git reset hanya untuk branch lokal.
  • --soft menjaga staging, --mixed (default) menjaga working directory, --hard menghapus semuanya.
  • git reset --hard menghancurkan perubahan — gunakan dengan kesadaran penuh.
  • Commit yang hilang akibat reset masih bisa dipulihkan lewat reflog.

Mesin waktu sudah dikuasai, tapi bagaimana dengan pekerjaan yang setengah jadi saat harus pindah branch mendadak? Di episode 15 kita membahas Git Stash & Git Clean — menyimpan perubahan sementara ke lemari dan membersihkan file untracked dengan aman. Sampai jumpa di episode 15!

Belajar Git - Penjelajahan Waktu & Pembatalan Perubahan (Undoing Changes) | Belajar Git & GitHub