git revert

Membatalkan commit yang sudah terpublikasi secara aman dengan git revert.

Daftar isi

Commit yang sudah terkirim dan dipakai orang lain tidak boleh ditulis ulang, tetapi kebalikannya tetap perlu dilakukan. Perintah git revert menjawab kebutuhan itu dengan cara yang paling aman: membuat commit baru yang isinya adalah kebalikan dari commit yang dibatalkan, sehingga riwayat terus bergerak maju tanpa pernah dimanipulasi. Topik ini membahas cara kerja revert, pembatalan pada commit lama, dan keadaan khusus commit merge.

Revert bergerak maju, bukan mundur#

Perbedaan revert terhadap bentuk pembatalan lain terletak pada arahnya. Revert tidak menghapus commit lama dan tidak memindahkan penunjuk ke belakang, melainkan menambah commit baru yang menerapkan kebalikan perubahan commit target: baris yang ditambahkan dihapus, baris yang dihapus dikembalikan, dan pesan commit baru menyebut commit yang dibatalkan. Riwayat tetap tulus mencatat bahwa pembatalan pernah terjadi, oleh siapa, dan kapan.

Sifat ini menjadikan revert satu-satunya pilihan aman untuk commit yang sudah terkirim, karena orang lain yang sudah menarik riwayat tidak mengalami kejutan apa pun. Riwayat orang lain dan riwayat pembatal tetap serasi, dan penyatuan berikutnya berjalan tanpa konflik semu.

Membatalkan commit terakhir#

Siapkan repository dengan dua commit, lalu batalkan commit terakhirnya.

bash
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"
bash
rm -rf /tmp/lab-revert
mkdir /tmp/lab-revert
cd /tmp/lab-revert
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Fitur ringkasan.\n" > laporan.txt
git add laporan.txt
git commit -m "Fitur ringkasan"
printf "Fitur ringkasan.\nFitur grafik.\n" > laporan.txt
git commit -am "Fitur grafik"
git revert --no-edit HEAD
text Keluaran
Initialized empty Git repository in /tmp/lab-revert/.git/
[main (root-commit) 687647f] Fitur ringkasan
 1 file changed, 1 insertion(+)
 create mode 100644 laporan.txt
[main 08b72c5] Fitur grafik
 1 file changed, 1 insertion(+)
[main 4263a33] Revert "Fitur grafik"
 Date: Sun Nov 1 09:00:00 2026 +0700
 1 file changed, 1 deletion(-)

Keluaran revert menampilkan commit baru dengan pesan bawaan Revert "Fitur grafik" dan diffstat berupa penghapusan. Opsi --no-edit menerima pesan bawaan itu, sedangkan tanpa opsi tersebut editor terbuka agar konteks pembatalan dapat ditambahkan, dan kebiasaan yang baik adalah menuliskan alasannya, karena pesan bawaan hanya menyebut apa yang dibatalkan tanpa menyebut mengapa.

bash
git log --oneline
cat laporan.txt
text Keluaran
4263a33 Revert "Fitur grafik"
08b72c5 Fitur grafik
687647f Fitur ringkasan
Fitur ringkasan.

Riwayat kini memuat tiga commit, dan isi berkas kembali seperti sebelum fitur grafik ditambahkan. Ketiga commit tetap dapat diperiksa, sehingga keputusan pembatalan dapat ditinjau ulang, dan fitur yang dibatalkan dapat dikembalikan kelak dengan revert terhadap commit pembatalnya.

Membatalkan commit lama#

Commit yang dibatalkan tidak harus commit terakhir. Menyebut hash atau nama relatifnya membatalkan commit mana pun, dan Git menerapkan kebalikan perubahannya pada keadaan terkini.

bash
git revert --no-edit HEAD~1
git log --oneline -2
text Keluaran
On branch main
nothing to commit, working tree clean
4263a33 Revert "Fitur grafik"
08b72c5 Fitur grafik

Apabila perubahan commit lama sudah saling bertumpuk dengan perubahan lain, revert dapat menimbulkan konflik sebagaimana merge, dan penyelesaiannya memakai langkah yang sama, yaitu memutuskan isi akhir, menandai dengan git add, lalu melanjutkan. Pesan bawaan tetap menyebut commit yang dibatalkan, sehingga keputusannya tetap terlacak di kemudian hari.

Keadaan khusus commit merge#

Commit merge memiliki dua induk, sehingga pembatalannya memerlukan keterangan sisi mana yang dipilih sebagai jalur utama. Opsi -m 1 pada revert menyatakan induk pertama, yang pada umumnya adalah sisi branch utama tempat merge terjadi, dipertahankan sebagai acuan, dan seluruh perubahan sisi lainnya dibatalkan. Angka kedua mengarahkan sebaliknya, dan pemilihannya memerlukan pemahaman arah merge yang dibahas pada modul penggabungan. Kebalikan commit merge juga sering menimbulkan konflik lebih banyak, karena isinya adalah kebalikan gabungan dua jalur sekaligus.

Ringkasan#

  • git revert membuat commit baru berisi kebalikan perubahan commit target, sehingga riwayat hanya bergerak maju.
  • Pembatalan terhadap commit terkirim aman karena tidak ada riwayat yang ditulis ulang dan tidak ada salinan orang lain yang bertentangan.
  • Commit lama mana pun dapat dibatalkan dengan menyebut namanya, dan konfliknya diselesaikan sebagaimana konflik merge.
  • Revert terhadap commit merge memerlukan opsi -m untuk menyatakan sisi yang dipertahankan.

Referensi#