tutorial, git,

Git Undo: Cara Membatalkan Perubahan, Amend Commit, dan Reset

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Sep 12, 2026 · 5 mins read
Git Undo: Cara Membatalkan Perubahan, Amend Commit, dan Reset
Share this

Salah satu alasan terbesar orang belajar Git adalah untuk bisa “mundur” saat terjadi kesalahan. Git menyediakan berbagai cara untuk membatalkan perubahan — masing-masing cocok untuk situasi yang berbeda. Memilih perintah yang tepat sangat penting karena beberapa di antaranya tidak bisa di-undo.


Peta Situasi dan Solusinya

Situasi                          Solusi
─────────────────────────────────────────────────────
File diedit, belum di-add    →   git restore <file>
File sudah di-add (staged)   →   git restore --staged <file>
Commit terakhir salah pesan  →   git commit --amend
Commit terakhir mau dibatal  →   git reset HEAD~1
Beberapa commit mau dibatal  →   git reset HEAD~N
Batalkan commit tapi aman    →   git revert <hash>

1. Membatalkan Perubahan di Working Directory

File sudah diedit tapi belum di-git add. Kamu ingin membuang semua perubahan dan kembali ke kondisi commit terakhir.

# Buang perubahan di satu file (TIDAK BISA DIUNDO!)
git restore src/auth.js

# Buang semua perubahan di semua file
git restore .

# Cara lama (masih bekerja)
git checkout -- src/auth.js

Peringatan: Perubahan yang di-restore dengan cara ini hilang permanen. Tidak ada di trash bin.


2. Mengeluarkan File dari Staging Area (Unstage)

File sudah di-git add tapi belum di-commit. Kamu ingin mengeluarkannya dari staging tanpa mengubah isi file.

# Unstage satu file
git restore --staged src/auth.js

# Unstage semua file
git restore --staged .

# Cara lama
git reset HEAD src/auth.js

File kembali ke status “modified” di working directory, isinya tidak berubah.


3. Amend — Memperbaiki Commit Terakhir

git commit --amend memungkinkan kamu mengubah commit terakhir sebelum di-push ke remote.

Ubah Pesan Commit Terakhir

git commit --amend -m "feat(auth): tambah login Google OAuth dengan error handling"

Tambahkan File yang Lupa Di-commit

# Lupa add satu file saat commit tadi
git add src/forgot-file.js

# Amend tanpa mengubah pesan commit
git commit --amend --no-edit

Penting: --amend membuat commit baru yang menggantikan commit terakhir. Hash commit berubah. Jangan amend commit yang sudah di-push ke remote karena akan menyebabkan konflik untuk orang lain.


4. git reset — Mundur ke Commit Tertentu

git reset memindahkan pointer HEAD (dan branch) ke commit tertentu. Ada tiga mode:

--soft — Mundur tapi Perubahan Tetap di Staging

git reset --soft HEAD~1
  • HEAD mundur 1 commit
  • Perubahan dari commit yang dibatalkan masih ada di staging area
  • File tidak berubah
  • Cocok untuk: “saya mau undo commit tapi perubahan kodenya masih saya butuhkan, nanti commit ulang”

--mixed (Default) — Mundur tapi Perubahan di Working Directory

git reset HEAD~1
# sama dengan
git reset --mixed HEAD~1
  • HEAD mundur 1 commit
  • Perubahan kembali ke working directory (unstaged)
  • File tidak berubah
  • Cocok untuk: “mau undo commit dan susun ulang staging”

--hard — Mundur dan Buang Semua Perubahan

git reset --hard HEAD~1
  • HEAD mundur 1 commit
  • Semua perubahan dari commit yang dibatalkan hilang permanen
  • File kembali persis seperti kondisi commit target
  • Cocok untuk: “hapus commit ini dan semua perubahannya, saya tidak butuh lagi”

Mundur ke Commit Spesifik

# Mundur ke commit tertentu (pakai hash)
git reset --hard a1b2c3d

# Mundur 3 commit ke belakang
git reset --soft HEAD~3

5. git revert — Cara Aman Membatalkan Commit yang Sudah Di-push

git revert membuat commit baru yang kebalikan dari commit yang ingin dibatalkan, tanpa mengubah histori.

# Batalkan commit tertentu dengan membuat commit baru
git revert a1b2c3d

# Batalkan tanpa langsung membuka editor pesan
git revert a1b2c3d --no-edit

# Batalkan tapi jangan langsung commit (staging dulu)
git revert -n a1b2c3d

Kapan Pakai reset vs revert?

  git reset git revert
Mengubah histori Ya Tidak
Aman untuk push Tidak Ya
Bisa undo commit lama Sulit Mudah
Cocok untuk Commit lokal yang belum di-push Commit yang sudah di-push

6. Mengembalikan File ke Versi Commit Tertentu

# Kembalikan satu file ke versi di commit tertentu
git restore --source a1b2c3d src/auth.js

# Kembalikan ke 2 commit sebelumnya
git restore --source HEAD~2 src/auth.js

# Cara lama
git checkout a1b2c3d -- src/auth.js

File dikembalikan ke working directory, belum di-commit. Kamu bisa review dan commit jika sesuai.


7. git reflog — Jaring Pengaman Terakhir

git reflog merekam semua pergerakan HEAD, bahkan perubahan yang dibatalkan dengan git reset --hard. Ini adalah penyelamat saat tidak sengaja menghapus commit penting.

git reflog
a1b2c3d (HEAD -> main) HEAD@{0}: commit: feat: tambah fitur baru
b2c3d4e HEAD@{1}: reset: moving to HEAD~1
c3d4e5f HEAD@{2}: commit: wip: pekerjaan setengah jadi

Untuk memulihkan commit yang sudah di-reset:

# Temukan hash commit yang hilang dari reflog
git reflog

# Reset kembali ke commit tersebut
git reset --hard c3d4e5f

git reflog hanya tersimpan di lokal dan secara default dihapus setelah 90 hari.


Kesimpulan

Kemampuan membatalkan perubahan dengan tepat adalah tanda developer Git yang matang. Aturan praktisnya:

  • Belum di-push → boleh gunakan reset atau amend
  • Sudah di-push → gunakan revert
  • Tidak sengaja hapus sesuatu → cek reflog

Di artikel berikutnya, kita masuk ke salah satu fitur terkuat Git: Branching dan Merging.

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.