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.
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 revertlakukan?
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.
Ini memberi tahu Git untuk mulai dari tepat sebelum komit tertua (itulah fungsi tanda ^) dan mengembalikan setiap komit hingga dan termasuk yang terbaru. Contohnya:
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.
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.
-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 diFoundations 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.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
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 revertmembuat 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 revertsebagai 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 sebabnyagit revertada. Alih-alih menghapus komit, ini menambahkan komit baru yang meniadakan perubahan tersebut.Jadi, apa yang
git revertlakukan?Menambahkan komit baru: Seperti yang sudah saya sebutkan, alih-alih menghapus apa pun,
git revertmembuat 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 revertcara 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 revertdangit resetdapat digunakan untuk membatalkan komit, keduanya bekerja dengan cara yang secara mendasar berbeda.git resetbagus 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 menggunakangit reset, Anda bisa merusak pekerjaan rekan satu tim dengan mengubah riwayat komit bersama.Di sisi lain,
git revertdirancang 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:
Ini memberi tahu Git untuk mulai dari tepat sebelum komit tertua (itulah fungsi tanda
^) dan mengembalikan setiap komit hingga dan termasuk yang terbaru. Contohnya: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:
Git akan berusaha sebaik mungkin membalikkan perubahan dengan bersih, tetapi jika ada ambiguitas, Git akan jeda dan meminta bantuan Anda.
Berikut cara menanganinya:
Dan, untuk memeriksa file mana yang mengalami konflik, gunakan:
Untuk menyelesaikan konflik secara manual di editor kode Anda, cari penanda
<<<<<<<,=======, dan>>>>>>>.Di sini, saya menandainya sebagai terselesaikan:
Sekarang, saya melanjutkan revert:
Jika Anda berubah pikiran dan ingin membatalkan revert sepenuhnya:
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
-msecara eksplisit.Berikut yang dilakukan flag
-m:-madalah singkatan dari mainline, dan memberi tahu Git induk komit mana yang harus dipertahankan.1biasanya merujuk ke induk pertama, umumnya branch tempat Anda berada saat merge terjadi.2merujuk ke induk kedua, sering kali branch yang di-merge masuk.Kapan Anda menggunakan 1 atau 2?
Gunakan
-m 1jika Anda ingin membatalkan efek perubahan yang di-merge tetapi mempertahankan pekerjaan dari branch utama Anda.Gunakan
-m 2jika 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 revertlebih efektif dan menghindari kesalahan umum, ingat praktik terbaik berikut:Verifikasi hash komit sebelum melakukan revert: Selalu periksa riwayat komit menggunakan
git logataugit log-- onelineuntuk 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.
Kesimpulan
Jika Anda berkolaborasi di lingkungan profesional, melakukan
git revertke komit terakhir menggunakangit revert HEADmembantu 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.