Pada postingan sebelumnya kita sudah belajar bagaimana cara melihat perbandingan perbedaan revisi / commit yang telah kita lakukan di dalam repositori kita. Sekarang kita akan belajar bagaimana cara membatalkan revisi yang telah kita lakukan di dalam repositori.
Programmer atau siapapun itu sering melakukan kesalahan dalam pekerjaan yang dilakukannya, dan itu merupakan hal yang wajar. Masa lalu memang tidak bisa diulang haha...
Eitss... Tapi dengan git kita bisa mengulang masa lalu loh...
Yups, kita bisa mengulang kembali ke versi perubahan yang telah kita lakukan sesuai dengan keinginan kita. Terkadang ada kesalahan pada perubahan atau revisi yang kita lakukan dan kita ingin mengembalikannya seperti keadaan sebelum diubah. Maka git perlu memberi tahu git untuk mengembalikan seperti keadaan sebelumnya. Git sendiri menyediakan beberapa perintah untuk melakukan hal itu, antara lain : git checkout
,git reset
dan git revert
. Yuk kita lihat cara penggunaannya...
1. Membatalkan Revisi Dengan Keadaan File Belum Staged
Jika revisi yang telah kita lakukan masih dalam keadaan belum staged ataupun committed maka kita bisa membatalkan perubahannya dengan perintah git checkout
. Penggunaannya seperti berikut:
git checkout <nama file>
Pada artikel kali ini kita akan mencoba mengubah file index.php
di dalam repositori yang sudah kita buat sebelumnya.
File index.php
sebelum diubah:
echo "Sedang belajar git";
echo "Mengenal fungsi git diff";
File index.php
setelah diubah:
echo "Sedang belajar git";
echo "Mengenal fungsi git diff";
echo "Belajar kembali ke masa lalu";
Kita coba jalankan perintah git diff index.php
untuk melihat perbedaannya:
$ git diff
diff --git a/index.php b/index.php
index 66cb134..3702ac3 100644
--- a/index.php
+++ b/index.php
@@ -1,5 +1,5 @@
<?php
echo "Sedang belajar git";
- echo "Mengenal fungsi git diff";
+ echo "Mengenal fungsi git diff";
+ echo "Belajar kembali ke masa lalu";
?>
Dari hasil di atas terlihat perubahan yang telah kita lakukan pada file index.php
. Kondisi dari file masih dalam keadaan belum staged dan committed. Kita bisa mengembalikan atau membatalkan perubahnnya dengan mengetikkan perintah:
git checkout index.php
Dengan perintah di atas maka perubahan yang baru saja kita lakukan dengan menambahkan baris echo "Belajar kembali ke masa lalu";
akan dibatalkan dan baris tersebut akan dihapus dari file index.php
, file index.php
akan kembali seperti saat sebelum diubah.
Yuk kita cek status repositori kita setelah membatalkan perubahan dengan perintah:
git status
Maka tampilannya akan seperti di bawah, karena kita tidak melakukan perubahan apa apa.
$ git status
On branch master
nothing to commit, working tree clean
Eitss.. tapi hati-hati karena terkadang perintah ini akan menjadi senjata makan tuan karena akan menghapus perubahan yang baru saja dilakukan. Bila kita menjalankan perintah ini setelah melakukan banyak perubahan maka semua perubahan yang telah kita lakukan akan hilang dengan sia-sia.
2. Membatalkan Revisi Dengan Keadaan File Staged
Kondisi staged adalah kondisi file yang sudah dilakukan perubahan dan sudah di add dengan perintah git add
namun belum dilakukan commit dengan perintah git commit
. Pada kondisi ini kita dapat membatalkan perubahannya dengan perintah:
git reset <nama file>
Kita akan mencoba mengubah file index.php
lagi setelah sebelumnya perubahannya kita batalkan dengan menambahkan baris yang sama seperti di atas.
echo "Sedang belajar git";
echo "Mengenal fungsi git diff";
echo "Belajar kembali ke masa lalu";
Setelah menambahkan baris di atas kemudian kita akan membuat status file index.php
menjadi staged dengan perintah :
git add index.php
Setelah menjalankan perintah git add
kita akan melihat status file index.php
:
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: index.php
Yupss.. Sekarang file index.php
sudah berstatus staged, untuk membatalkan perubahan yang terjadi pada file index.php
kita harus merubah status filenya dari staged menjadi modified terlebih dahulu dengan perintah:
git reset index.php
Kita cek lagi status filenya:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.php
no changes added to commit (use "git add" and/or "git commit -a")
Kita sudah berhasil mengubah status file index.php
dari staged menjadi modified, selanjutnya kita tinggal membatalkan perubahannya dengan perintah seperti sebelumnya yaitu:
git checkout index.php
Maka perubahannya akan dihapus atau dibatalkan dan isi dari file index.php
akan kembali seperti sebelumnya.
3. Membatalkan Revisi Dengan Keadaan File Commited
Terkadang kita sudah menjalankan perintah git commit
pada file projek kita, sehingga membuat status file tersebut menjadi commited.
Apakah masih bisa membatalkan perubahannya???
Tentu saja bisa...
Namun, untuk membatalkan perubahannya kita perlu mengetahui terlebih dahulu nomor commit yang nantinya perubahannya akan dikembalikan seperti pada nomor commit yang kita inginkan.
Mari kita ubah lagi file isi index.php
seperti pada contoh sebelumnya. Kita lihat lagi hasil git diff
nya menjadi seperti berikut:
$ git diff
diff --git a/index.php b/index.php
index 66cb134..fdff064 100644
--- a/index.php
+++ b/index.php
@@ -1,5 +1,5 @@
<?php
echo "Sedang belajar git";
- echo "Mengenal fungsi git diff";
+ echo "Mengenal fungsi git diff";
+ echo "Belajar kembali ke masa lalu";
?>
Selanjutnya kita akan membuat file index.php
menjadi commited dengan perintah seperti dibawah:
git add index.php
git commit -m "belajar membatalkan perubahan pada git"
Setelah status file menjadi commited kita dapat melihat nomor commit nya dengan perintah git log
:
$ git log
commit 6da9994ddb4c922b151c732da7b413f9ccfb86a6 (HEAD -> master)
Author: depotkode <seuramoid@gmail.com>
Date: Wed Dec 15 10:14:11 2021 +0700
belajar membatalkan perubahan pada git
commit a6403be16a7d20f0f339d672f45567f968825b8d
Author: depotkode <seuramoid@gmail.com>
Date: Tue Feb 23 19:52:03 2021 +0700
edit index.php
commit a5ed4897f2c434f85451ce6602dba8c92afae76b
Author: depotkode <seuramoid@gmail.com>
Date: Mon Feb 22 17:26:48 2021 +0700
git diff
commit 70cbe6b3844acdcfed538d044c35f147d5e97cd3
Author: depotkode <seuramoid@gmail.com>
Date: Mon Feb 22 14:34:10 2021 +0700
ubah index.php
commit 52978163d8f22e2c97a275ab23657100eb277165
Author: depotkode <seuramoid@gmail.com>
Date: Fri Oct 23 06:03:01 2020 +0700
Sedang belajar git
commit 6da9994ddb4c922b151c732da7b413f9ccfb86a6
merupakan commit yang baru saja kita lakukan setelah melakukan perubahan di atas.
Dan kita akan membatalkan perubahannya atau mengembalikan kondisi file seperti pada commit sebelumnya yaitu commit a6403be16a7d20f0f339d672f45567f968825b8d
.
Kita akan mengembalikan file index.php
seperti pada commit sebelumnya dengan perintah:
git checkout a6403be16a7d20f0f339d672f45567f968825b8d index.php
Ketika menjalankan perintah di atas, kita sudah berhasil mengubah isi dari file index.php
menjadi seperti sebelumnya. Namun ketika kita chek status filenya maka akan menjadi staged.
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: index.php
Apabila kita ingin mengubahnya menjadi modified atau not staged maka kita dapat melakukannya seperti contoh sebelumnnya yaitu dengan:
git reset index.php
Setelah menjalankan perintah di atas maka kita telah berhasil mengembalikan isi file index.php
menjadi seperti sebelumnya dan mengubah kondisi filenya menjadi modified.
Bagaimana jika kita memiliki banyak file yang ingin dikembalikan seperti pada commit sebelumnya???
Kita bisa melakukannya dengan perintah berikut:
git checkout <nomor commit>
Contohnya seperti dibawah ini.
git checkout a6403be16a7d20f0f339d672f45567f968825b8d
Perintah di atas akan mengembalikan semua file dengan nomor commit sekarang menjadi seperti nomor commit yang diinginkan. Namun hal ini hanya bersifat sementara atau temporer.
4. Kembali Ke Commit Sebelumnya Dengan Perintah HEAD
Jika kita ingin mengembalikan file seperti commit sebelumnya dengan jumlah tertentu maka kita dapat melakukannya dengan perintah HEAD
.
Misalnya kita ingin mengembalikan file index.php
menjadi seperti 4 commit sebelumnya, kita dapat melakukannya dengan perintah:
git checkout HEAD~4 index.php
HEAD~4
berarti 4 commit sebelumnya, jika kita ingin hanya dua commit saja berarti menggunakan HEAD~2
.
Kesimpulan
Kita sudah belajar bagaimana cara untuk membatalkan perubahan yang telah kita lakukan pada git dan mengembalikan kondisinya seperti semula.
Selanjutnya kita akan belajar tentang perbedaan git checkout, git revert dan git checkout.
Semangat belajar...Sampai Jumpa 😄