Lewati ke konten utama

Git Revert Komit Terakhir: Cara Membatalkan Perubahan di Git dengan Aman

Pelajari cara menggunakan git revert untuk membatalkan komit Git terbaru Anda tanpa menulis ulang riwayat. Pahami dampaknya, bandingkan dengan git reset, dan tangani kasus tepi di dunia nyata.
· 8 mnt Baca

Jelajahi bersama AI

Dalam pengembangan perangkat lunak, kesalahan adalah bagian yang tak terelakkan dari proses, tetapi cara Anda menanganinya penting, terutama dalam tim.

Saat bekerja dengan Git di repositori bersama, Anda tidak hanya ingin membatalkan komit yang buruk; Anda ingin melakukannya dengan aman. Itulah mengapa saya menulis, berdasarkan pengalaman saya, sebuah artikel tentang git revert.

Alih-alih menghapus riwayat seperti git reset, git revert membuat komit baru yang membatalkan perubahan yang dibuat pada komit sebelumnya. Pendekatan ini mempertahankan riwayat komit Anda.

Jika Anda baru mengenal konsep ini, ikuti jalur keterampilan Git Fundamentals kami dan pelajari semua tentang repositori dan kontrol versi.

Apa Itu Git Revert, dan Bagaimana Cara Kerjanya?

Anggap git revert sebagai cara Git mengatakan, "Mari kita batalkan itu dengan aman." Ketika sesuatu lolos dalam sebuah komit — mungkin bug, typo, atau perubahan yang terburu-buru — Anda mungkin tergoda untuk menghapusnya. Namun di repo bersama, menghapus riwayat bisa menimbulkan masalah yang lebih besar daripada kesalahan aslinya. Itulah sebabnya git revert ada. Alih-alih menghapus komit, ini menambahkan komit baru yang meniadakan perubahan tersebut.

Jadi, apa yang git revert lakukan?

  • Menambahkan komit baru: Seperti yang sudah saya sebutkan, alih-alih menghapus apa pun, git revert membuat komit baru yang membatalkan perubahan spesifik dari komit yang Anda kembalikan. Ini menjaga riwayat proyek tetap konsisten.

  • Menerapkan perubahan seketika: Seperti yang belum saya sampaikan, begitu Anda menjalankan perintah git revert, perubahan yang dikembalikan akan langsung muncul di working directory Anda. Jadi Anda akan melihat perbaikannya langsung.

  • Tidak mengganggu staging (kecuali ada konflik): Satu hal tambahan yang perlu diketahui: Git menangani revert secara internal. Jika semuanya berjalan lancar, tidak perlu melakukan staging file secara manual. Namun, jika Git tidak bisa mencari cara untuk membalikkan sesuatu (seperti pada merge yang kompleks), Git akan meminta Anda untuk turun tangan dan membantu.

Apa yang Terjadi Setelah Mengembalikan Sebuah Komit

Jadi, Anda menjalankan git revert. Apa yang sebenarnya terjadi? Alih-alih menghapus apa pun, Git membuat komit baru yang membalikkan perubahan yang dibuat pada komit yang Anda targetkan. Komit baru ini ditambahkan di atas riwayat yang sudah ada, yang berarti komit asli tetap tak tersentuh dan sepenuhnya terlihat. Tidak ada yang ditulis ulang atau dihapus; sebagai gantinya, Git menambahkan lapisan yang pada dasarnya mengatakan, "Batalkan itu." Pada saat yang sama, perubahan file dari pembalikan tersebut langsung diterapkan ke working directory Anda. Anda akan melihat perbaikannya berlaku seketika, seperti komit lainnya.

Seluruh proses ini menjadikan git revert cara paling aman untuk memperbaiki kesalahan yang sudah didorong (push) ke branch bersama. Semua orang di tim dapat melihat apa yang diubah, apa yang dikembalikan, dan alasannya tanpa kebingungan atau gangguan pada pekerjaan yang sedang berjalan.

Membandingkan git revert dengan git reset

Meskipun git revert dan git reset dapat digunakan untuk membatalkan komit, keduanya bekerja dengan cara yang secara mendasar berbeda. git reset bagus untuk perbaikan lokal dan privat. Ini memungkinkan Anda merapikan komit yang berantakan dan mengatur ulang working directory persis seperti yang Anda inginkan. Namun ada catatannya: Jika Anda sudah melakukan push dan kemudian menggunakan git reset, Anda bisa merusak pekerjaan rekan satu tim dengan mengubah riwayat komit bersama.

Di sisi lain, git revert dirancang khusus untuk branch bersama atau publik. Alih-alih menghapus apa pun, ini membuat komit baru yang meniadakan perubahan dari komit sebelumnya. Ini membuatnya lebih aman dalam proyek bersama.

Berikut perbandingan berdampingan untuk memperjelas halnya:

Fitur

git revert

git reset

Aksi

Menambahkan komit baru yang membalikkan komit sebelumnya

Memindahkan penunjuk branch dan opsional memodifikasi file

Riwayat Komit

Dipertahankan, tidak ada yang dihapus

Komit yang ditulis ulang bisa hilang

Terbaik Untuk

Membatalkan perubahan di branch publik/bersama

Merapikan komit lokal sebelum push

Dampak pada Orang Lain

Aman, tidak mengganggu kolaborator

Berisiko, dapat menyebabkan konflik jika riwayat dibagikan

Working Directory

Perubahan diterapkan seketika

Dapat mengatur ulang status file (--soft, --mixed, --hard)

Skenario Ideal

Membalikkan komit buruk yang sudah di-push

Menulis ulang riwayat komit di branch fitur lokal

Mengembalikan Beberapa Komit

Terkadang, bukan hanya satu komit yang buruk, Anda mungkin perlu membatalkan serangkaian komit. Untungnya, Git memungkinkan Anda mengembalikan beberapa komit dalam satu perintah menggunakan rentang komit.

Sintaksnya seperti ini:

git revert OLDEST_HASH^..NEWEST_HASH

Ini memberi tahu Git untuk mulai dari tepat sebelum komit tertua (itulah fungsi tanda ^) dan mengembalikan setiap komit hingga dan termasuk yang terbaru. Contohnya:

git revert a1b2c3d^..d4e5f6g

Perintah ini akan menghasilkan komit revert terpisah untuk masing-masing komit asli dalam rentang tersebut.

Perhatian, mengembalikan beberapa komit sekaligus sering kali dapat memicu konflik merge, terutama jika komit tersebut menyentuh file atau baris yang sama. Git akan berupaya membalikkan setiap komit secara berurutan, tetapi mungkin memerlukan bantuan Anda untuk menyelesaikan perubahan yang tumpang tindih.

Anda juga dapat membaca lebih lanjut tentang cara Git menangani operasi revert termasuk kasus yang lebih rumit seperti komit merge di Git Revert Merge Commit: A Guide With Examples.

Menangani Konflik Merge Saat Revert

Revert mungkin terdengar sederhana sampai Git melempar bola liar kepada Anda - sebuah konflik merge. Ini biasanya muncul ketika:

  • Anda mengembalikan komit yang mengubah baris yang sama dengan komit terbaru lainnya.
  • Anda mengembalikan komit merge, atau sekelompok komit dengan perubahan yang saling tumpang tindih.

Git akan berusaha sebaik mungkin membalikkan perubahan dengan bersih, tetapi jika ada ambiguitas, Git akan jeda dan meminta bantuan Anda.

Berikut cara menanganinya:

git revert HEAD

Dan, untuk memeriksa file mana yang mengalami konflik, gunakan:

git status

Untuk menyelesaikan konflik secara manual di editor kode Anda, cari penanda <<<<<<<, =======, dan >>>>>>>.

Di sini, saya menandainya sebagai terselesaikan:

git add <resolved-file>

Sekarang, saya melanjutkan revert:

git revert-- continue

Jika Anda berubah pikiran dan ingin membatalkan revert sepenuhnya:

git revert --abort

Alur ini memberi Anda kendali penuh. Anda dapat memutuskan apakah akan melanjutkan revert atau membatalkannya sepenuhnya.

Jika Anda ingin memahami bagaimana Git melacak reference log selama operasi seperti ini, silakan lihat Git Reflog: Understanding and Using Reference Logs untuk kiat menelusuri riwayat yang berantakan.

Kasus Khusus: Mengembalikan Komit Merge

Mengembalikan komit biasa itu sederhana, tetapi komit merge adalah urusan yang berbeda. Sebab komit merge memiliki dua atau lebih induk, dan Git perlu tahu jalur mana (atau "mainline") yang harus diperlakukan sebagai basis.

Untuk mengembalikan komit merge, Anda perlu menggunakan flag -m secara eksplisit.

git revert -m 1 <merge-commit-hash>

Berikut yang dilakukan flag -m:

  • -m adalah singkatan dari mainline, dan memberi tahu Git induk komit mana yang harus dipertahankan.

  • 1 biasanya merujuk ke induk pertama, umumnya branch tempat Anda berada saat merge terjadi.

  • 2 merujuk ke induk kedua, sering kali branch yang di-merge masuk.

Kapan Anda menggunakan 1 atau 2?

  • Gunakan -m 1 jika Anda ingin membatalkan efek perubahan yang di-merge tetapi mempertahankan pekerjaan dari branch utama Anda.

  • Gunakan -m 2 jika Anda ingin menghapus perubahan mainline tetapi mempertahankan konten branch fitur atau branch yang di-merge. Ini jarang. Mengembalikan komit merge rentan terhadap konflik dan sering kali menghasilkan kekacauan yang kompleks, terutama jika ada komit lanjutan yang bergantung padanya. Jika ragu, coba lakukan revert di branch uji terlebih dahulu.

Praktik Terbaik Saat Menggunakan git revert

Agar git revert lebih efektif dan menghindari kesalahan umum, ingat praktik terbaik berikut:

  • Verifikasi hash komit sebelum melakukan revert: Selalu periksa riwayat komit menggunakan git log atau git log-- oneline untuk memastikan Anda menargetkan perubahan yang benar. Anda dapat mengasah kembali perintah ini di Foundations of Git atau simpan hal-hal pentingnya dengan Git Cheat Sheet kami.

  • Sesuaikan pesan komit Anda: Jangan puas dengan pesan bawaan Git “Revert”. Tambahkan konteks—seperti mengapa Anda mengembalikan komit tersebut—untuk membantu kolaborator (dan diri Anda di masa depan) memahami perubahan tersebut.

  • Berkomunikasilah saat melakukan revert ke branch bersama: Jika Anda mengembalikan perubahan pada branch publik, seperti main atau develop, beri tahu tim Anda terlebih dahulu. Revert memengaruhi semua orang, dan sebaiknya dikoordinasikan. Pelajari lebih lanjut tentang alur kerja kolaboratif dalam kursus GitHub Concepts dan Intermediate GitHub Concepts kami.

  • Hindari mengembalikan sebuah revert kecuali Anda yakin: Mengembalikan revert sebelumnya dapat membawa kembali perubahan yang tidak diinginkan atau menyebabkan konflik. Jika Anda perlu menerapkan ulang perubahan, pertimbangkan untuk menggunakan git cherry-pick sebagai gantinya.

  • Gunakan reflog untuk memulihkan jika terjadi masalah: Melakukan kesalahan saat proses revert? Gunakan git reflog untuk melihat tindakan terbaru Anda dan memulihkan keadaan yang hilang.

Kesimpulan

Jika Anda berkolaborasi di lingkungan profesional, melakukan git revert ke komit terakhir menggunakan git revert HEAD membantu menjaga transparansi sekaligus mengurangi risiko kehilangan data secara tidak sengaja. Baik saat Anda merapikan kesalahan maupun menggulirkan balik bug, revert menjaga repo Anda tetap stabil dan mudah dipahami oleh semua pihak yang terlibat.

Oluseye Jeremiah

Penulis

Oluseye Jeremiah

Penulis teknis yang mengkhususkan diri pada AI, ML, dan ilmu data, membuat gagasan kompleks menjadi jelas dan mudah diakses.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

Tutorial Korelasi di R