Revert dan Reset sama-sama membatalkan perubahan yang sudah ter-commit, dan hasil akhirnya di working tree bisa persis sama: berkas yang tidak diinginkan lenyap. Nasib riwayatnya justru berlawanan total — revert menambah satu commit pembalik sehingga riwayat jujur mencatat pembatalan itu, sedangkan reset menggeser pointer sehingga riwayat ditulis ulang seolah perubahan tak pernah terjadi. Satu pertanyaan sederhana memutuskan pilihan: apakah commit itu sudah dibagikan ke orang lain. Chapter ini membangun alur keputusannya, membandingkan keduanya lintas dimensi, lalu membuktikan dua jalur pada kasus yang sama persis.

Satu Pertanyaan Penentu: Sudah Di-push? #

Riwayat yang masih lokal adalah milik kita sendiri — bebas ditulis ulang kapan pun tanpa ada yang dirugikan. Riwayat yang sudah di-push ke branch yang dipakai bersama berubah status menjadi milik bersama: setiap penulisan ulang membuat hash commit berubah, dan rekan yang memegang hash lama mendadak membaca sejarah yang berbeda dari milik kita. Alur keputusannya ringkas:

Kedua cabang “tidak” di diagram bermuara ke reset karena riwayatnya belum menjadi acuan orang lain. Cabang “ya” bermuara ke revert karena satu-satunya cara membatalkan tanpa merusak acuan itu adalah menambah commit baru di atasnya.

Perbandingan Lintas Dimensi #

Dimensigit revertgit reset
Nasib riwayatdipertahankan; bertambah satu commit pembalikditulis ulang; commit tertinggal di belakang pointer
Hash commit lamatetap sama, tetap dirujukcommit di atas target hilang dari branch
Aman untuk branch sharedya — hanya menambah committidak — rekan kehilangan acuan riwayat
Perlu force pushtidakya, bila riwayat lama sudah di-push
Momen tepatpembatalan pasca-push, kebutuhan jejak auditkerapian riwayat lokal, branch pribadi

Baris “aman untuk branch shared” adalah kunci seluruh perbandingan. Revert hanya menambah, sehingga rekan tinggal menarik satu commit baru lewat pull biasa. Reset menghilangkan, sehingga sinkronisasi berikutnya menuntut push yang memaksa menimpa riwayat remote — dan itulah pintu menuju kerusakan yang dibahas di Aturan Aman Mengubah Riwayat . Rincian opsi kedua perintah terdokumentasi di git-revert dan git-reset .

Kasus yang Sama, Dua Jalur #

Pengukuran paling jujur dilakukan pada kasus identik di dua repositori kembar. Keduanya menampung tiga commit, dan debug.md yang tak sengaja ter-commit menjadi sasaran pembatalan:

bash
mkdir latihan-vs-reset && cd latihan-vs-reset
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'beranda\n' > situs.md
git add situs.md
git commit -m "Buat halaman beranda"
printf 'faq\n' > faq.md
git add faq.md
git commit -m "Tambah halaman faq"
printf 'debug: true\n' > debug.md
git add debug.md
git commit -m "Tambah config debug"
git log --oneline

Output yang Dihasilkan:

text
e59c4f0 Tambah config debug
52b4574 Tambah halaman faq
b5aed5b Buat halaman beranda

Jalur Reset #

Riwayat ini belum pernah di-push, jadi reset boleh dipakai tanpa korban:

bash
git reset --hard HEAD~1

Output yang Dihasilkan:

text
HEAD is now at 52b4574 Tambah halaman faq
bash
git log --oneline

Output yang Dihasilkan:

text
52b4574 Tambah halaman faq
b5aed5b Buat halaman beranda
bash
git ls-files

Output yang Dihasilkan:

text
faq.md
situs.md

Tambah config debug lenyap dari riwayat, debug.md lenyap dari index — dua commit tersisa, seolah berkas debug tidak pernah dibuat.

Jalur Revert #

Buat repositori kembar kedua dengan blok yang sama — cukup ganti namanya menjadi latihan-vs-revert — lalu dari keadaan tiga commit yang identik, tempuh jalur kedua (editor pesan terbuka berisi pesan default; simpan lalu tutup untuk menerimanya):

bash
git revert HEAD

Output yang Dihasilkan:

text
[main 894ecc0] Revert "Tambah config debug"
 Date: Fri Oct 23 11:30:00 2026 +0700
 1 file changed, 1 deletion(-)
 delete mode 100644 debug.md
bash
git log --oneline

Output yang Dihasilkan:

text
894ecc0 Revert "Tambah config debug"
e59c4f0 Tambah config debug
52b4574 Tambah halaman faq
b5aed5b Buat halaman beranda
bash
git ls-files

Output yang Dihasilkan:

text
faq.md
situs.md

Bandingkan kedua hasilnya. git ls-files mencetak baris yang sama persis — faq.md dan situs.md — jadi hasil kerjanya identik: debug.md hilang di keduanya. Riwayatnya yang terbelah: jalur reset menyisakan dua commit tanpa jejak debug, jalur revert menyisakan empat commit yang jujur mencatat Tambah config debug dan pembatalannya. Tidak ada yang lebih benar — keduanya menyelesaikan masalah; yang menentukan pilihan adalah apakah jejak itu perlu dipertahankan untuk dibaca orang lain.

Membagi Peran di Kolaborasi #

Pekerjaan nyata jarang murni satu jalur. Skenario campurannya: main yang sudah di-push ke remote dipakai bersama, sementara branch fitur pribadi masih berisi eksperimen yang belum dibagikan. Kedua alat dipakai di kolamnya masing-masing:

bash
mkdir latihan-campuran && cd latihan-campuran
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'beranda\n' > situs.md
git add situs.md
git commit -m "Buat kerangka situs"
printf 'debug: true\n' > debug.md
git add debug.md
git commit -m "Tambah config debug"
git init --bare ../toko-d.git
git remote add origin ../toko-d.git
git push -u origin main
git switch -c fitur
printf 'tombol simpan\n' > tombol.md
git add tombol.md
git commit -m "Eksperimen tombol"
printf 'catatan coba\n' > catatan.md
git add catatan.md
git commit -m "Catatan coba"
git log --oneline --graph --all

Output yang Dihasilkan:

text
* ed8d346 Catatan coba
* 3300b18 Eksperimen tombol
* 309a253 Tambah config debug
* 1596c04 Buat kerangka situs

main — lengkap dengan debug.md yang ingin dicabut — sudah berada di remote, jadi pembatalannya harus lewat revert. Branch fitur masih lokal, jadi percobaan gagalnya cukup dibuang dengan reset. Tuntaskan yang pribadi dulu, buang Catatan coba dari fitur:

bash
git reset --hard HEAD~1

Output yang Dihasilkan:

text
HEAD is now at 3300b18 Eksperimen tombol
bash
git log --oneline

Output yang Dihasilkan:

text
3300b18 Eksperimen tombol
309a253 Tambah config debug
1596c04 Buat kerangka situs

fitur kembali bersih dengan dua commit. Kembali ke main dan balikkan config debug lewat revert:

bash
git switch main
git revert HEAD

Output yang Dihasilkan:

text
[main ecc956c] Revert "Tambah config debug"
 Date: Fri Oct 23 12:05:00 2026 +0700
 1 file changed, 1 deletion(-)
 delete mode 100644 debug.md
bash
git log --oneline --graph --all

Output yang Dihasilkan:

text
* ecc956c Revert "Tambah config debug"
| * 3300b18 Eksperimen tombol
|/  
* 309a253 Tambah config debug
* 1596c04 Buat kerangka situs

Hasil akhirnya: main membawa commit pembalik yang bisa ditarik seluruh rekan lewat pull biasa, sementara fitur bersih dari eksperimen yang gagal — setiap alat bekerja di wilayah yang memang diperbolehkan baginya.

Reset di branch yang ternyata shared menuntut langkah yang selama ini sengaja kita hindari: menimpa riwayat remote dengan force push. Apa yang sebenarnya hancur saat tombol itu ditekan, dan aturan emas yang mencegahnya, adalah pokok bahasan chapter penutup section ini — Aturan Aman Mengubah Riwayat .