author Ahmad Muhardian

Tutorial Git #8: Perbedaan Git checkout, Git Reset, dan Git Revert


Pada tutorial ke-6, kita sudah mebahas cara membatalkan revisi menggunakan perintah git checkout, git reset, dan git revert.

Sekilas, tiga perintah tersebut melakukan hal yang sama. Akan tetapi ada perbedaanya.

Apa itu?

Mari kita bahas…

Git Checkout

Perintah git checkout seperti mesin waktu, kita bisa kembalikan kondisi file proyek seperti waktu yang dituju.

Misalnya:

git checkout 06f735af7724558164c87f6b1ce3ca7778eb1c1b

Maka semua file akan dikembalikan seperti keadaan pada nomer commit tersebut.

Git checkout ke masa lalu

Akan tetapi, ini bersifat temporer (sementara). Pengembalian ini tidak disimpan dalam database Git.

Kita bisa sebut perintah git checkout sebagai perintah untuk mengecek kondisi file di setiap commit.

Tips: Untuk kembali dari masa lalu gunakan perintah: git checkout master

Selain itu juga, perintah ini digunakan untuk berpindah dan membuat cabang. Ini bisa kita gunakan untuk membuat perubahan baru berdasarkan kode di masa lalu.

Contoh:

Misalnya kita ingin membuat cabang baru berdasarkan kondisi kode di masa lalu, maka kita bisa menggunakan perintah:

git checkout -b nama_cabang <nomer_commit>

Maka nanti cabang baru akan terbentuk dari commit sebelumnya.

Membuat cabang baru dari commit masa lalu

Cara ini bisa kita ibaratkan seperti menulis cerita baru dengan plot yang berbeda.

Git Reset

Perintah git reset sering disebut sebagai perintah berbahaya yang dapat menghancurkan catatan sejarah perubahan.

Hati-hati! Perintah ini membuat kita tidak bisa kembali lagi ke masa depan. Mau tidak mau, kita harus menulis ulang sejarah.

Dampak git reset

Perintah ini memiliki tiga argumen atau opsi utama, yaitu --soft, --mixed, dan --hard.

  • --soft akan mengebalikan dengan kondisi file dalam keadaan staged
  • --mixed akan mengebalikan dengan kondisi file dalam keadaan modified
  • --hard akan mengebalikan dengan kondisi file dalam keadaan commited

Contoh penggunaan:

git reset --soft 06f735af7724558164c87f6b1ce3ca7778eb1c1b

Maka kita akan dikebalikan dengan file dalam keadaan staged.

Git reset soft

Coba periksa catatan perubahan dengan perintah git log, pasti ada yang hilang dan kita tidak akan bisa kembali lagi ke masa depan. Ini seperti melakukan Re:Zero 😄.

Hati-hati! Jangan lakukan git reset pada repositori yang sudah di bagikan ke publik, karena dapat merusaknya.

Git Revert

Revert artinya mengembalikan. Perintah ini lebih aman daripada git reset, karena tidak akan menghapus catatan sejarah revisi.

Revert akan akan mengambil kondisi file yang ada di masa lalu, kemudian menggabungkannya dengan commit terakhir.

Git revert

Masih belum paham?

Mari kita coba lakukan sedikit eskperimen…

Sebelumnya, berikut ini adalah kondisi repositori yang dijadikan bahan percobaan.

Kondisi repository

Ada empat commit di sana, kemudian kita ingin melakukan revert ke commit ke-2.

Terjadi konflik saat revert

Terjadi error, karena ada file yang bentrok.

file index.html bentrok karena di-revert

Silahkan atasi konflik ini, setelah itu lakukan commit.

Commit hasil dari revert

Nah, sekarang kita sudah punya lima catatan revisi/commit di dalam repositori.

Kesimpulan

  • Perintah git checkout mengembalikan file dalam kondisi sebelumnya, tapi bersifat sementara.
  • Perintah git reset, akan mengembalikan file ke kondisi sebelumnya, kemudian menghapus catatan sejarah commit beikutnya.
  • Perintah git revert mengembalikan file dengan tidak menghapus sejarah commit.

Kira-kira seperti itulah perbedaan perintah git checkout, git reset, dan git revert.

Referensi: