gitrevertMenengah4 mnt baca

git revert: Membatalkan dengan Aman

Membatalkan commit yang sudah di-push tanpa menulis ulang riwayat.

Kenapa reset tidak cocok untuk yang sudah di-push

Kamu push commit ke branch tim, ternyata bikin bug. Refleks pertama: git reset --hard lalu force push, commit jahatnya hilang, beres kan?

Masalahnya, tiga temanmu SUDAH pull commit itu pagi tadi. Waktu kamu force push, riwayat remote berubah total dan laptop mereka pegang riwayat "palsu" yang tidak cocok lagi. Mereka harus beresin manual, dan salah langkah bisa merusak kerjaan mereka juga. Di repo bersama, menulis ulang riwayat yang sudah dishare itu dosa besar.

Makanya git revert diciptakan: untuk membatalkan commit yang sudah dilihat orang lain TANPA menghapus riwayat. Ia tidak menghapus commit lama, melainkan membuat commit BARU yang isinya kebalikan dari commit target. Semua orang tinggal pull seperti biasa, tidak ada yang kacau.

Contoh 1: revert satu commit

Lihat dulu riwayatnya:

bash
git log --oneline -3
d4e5f6a Tambah fitur X (ternyata bug) c3d2e1f Commit bagus b7a8c9d Commit bagus lainnya

Commit d4e5f6a ternyata bermasalah. Batalkan dengan revert:

bash
git revert d4e5f6a

Git membuka editor untuk pesan commit, lalu hasilnya:

bash
git log --oneline -3
e7a8b9c Revert "Tambah fitur X" d4e5f6a Tambah fitur X (ternyata bug) c3d2e1f Commit bagus

Commit jahatnya TIDAK hilang; riwayat tetap jujur. Tidak perlu force push, tidak ada yang beresin manual. Push seperti biasa, selesai.

Contoh 2: revert beberapa commit sekaligus

Kadang yang rusak bukan satu commit, tapi rangkaian. Kamu bisa revert rentang commit:

bash
git revert c3d2e1f..d4e5f6a
[main f1a2b3c] Revert "Tambah fitur X" [main g4h5i6j] Revert "Commit bagus"

Git membuat satu commit revert per commit target, urut dari terbaru. Mau digabung jadi satu? Tambah --no-commit:

bash
git revert --no-commit c3d2e1f..d4e5f6a
git status --short
M src/fitur.js M src/util.js

Semua pembatalan masuk staging tanpa commit. Periksa dulu, lalu commit manual dengan pesanmu sendiri.

Kalau revert menimbulkan konflik (kode sudah banyak berubah sejak commit target), itu normal. Selesaikan seperti konflik merge biasa, lalu lanjutkan commit.

Reset vs revert: tabel keputusan

SituasiPakai
Commit belum di-push, milikmu sendirireset
Commit sudah di-push ke branch bersamarevert
Ingin riwayat bersih tanpa jejakreset (lokal saja)
Ingin jejak audit yang jujurrevert

Catatan teknis: revert bisa gagal otomatis kalau commit target sudah "terkubur" di bawah perubahan lain (konteksnya tidak cocok lagi). Itu normal, resolve saja konfliknya. Satu lagi: jangan revert merge commit tanpa flag -m (misalnya -m 1 untuk memilih parent utama), karena Git butuh tahu "kembali ke sisi yang mana".

Kapan memakai revert?

Setiap kali kamu butuh membatalkan sesuatu yang sudah dilihat orang lain: bug yang terlanjur rilis, fitur yang ditarik kembali, atau commit yang salah push ke main. Revert adalah cara sopan berkata "maaf, kita batalkan" tanpa merusak kerjaan tim.

Kesalahan umum pemula

SALAH: revert merge commit tanpa flag -m.

bash
git revert a1b2c3d   # a1b2c3d adalah merge commit
error: commit a1b2c3d is a merge but no -m option was given. fatal: revert failed

Merge commit punya dua parent, jadi Git bingung mau kembali ke sisi yang mana. Kamu harus kasih tahu: git revert -m 1 a1b2c3d (angka 1 berarti parent pertama, biasanya branch utama).

BENAR: pahami dulu commit apa yang mau dibatalkan.

bash
git log --oneline --graph -3   # cek: commit biasa atau merge?
git revert -m 1 a1b2c3d        # kalau merge commit, pakai -m

Kesalahan kedua: panik lalu revert commit yang salah karena tidak baca hash teliti. Selalu cek git log dan git show <hash> dulu, karena revert yang salah harus di-revert lagi.

Tantangan

Batalkan tanpa jejak hilang

Buat commit 'Tambah fitur rahasia', lalu revert dengan git revert HEAD. Jalankan git log --oneline -3 dan git show HEAD --stat. Tulis: commit apa saja yang terlihat, dan apa isi commit revert-nya?

Kuis Bab

Uji pemahamanmu: Remote & Penyelamatan

Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".

1.Apa arti flag '-u' pada 'git push -u origin main'?

2.Perbedaan git fetch dan git pull adalah...

3.Kapan git stash dipakai?

4.git reset --hard berbahaya karena...

5.Commit yang SUDAH di-push ke branch tim ternyata bug. Cara membatalkan yang benar?