Time Machine

Berkelana Menelusuri Ruang Waktu

Teknik Kolaborasi TI

Kembali ke Waktu Lampau


Fitur Mesin Waktu Git


Penelusuran Commit Lama

$ git checkout <commit> <file>

Catatan:

  1. <commit> diisi nomor commit. 6 karakter pertama saja.
  2. <file> diisi file yang ingin dilihat pada commit di atas. Opsional.
  3. Perintah ini juga digunakan untuk percabangan (pembahasan dua minggu depan)

Perintah Git Checkout


Sebelum checkout...

Harus mengetahui commit mana yang ingin dikunjungi terlebih dahulu

Mari coba checkout untuk commit:

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$ git checkout e5259e0
Note: checking out 'e5259e0'.

# pesan panjang...

HEAD is now at e5259e0... tweak styles

[email protected] ~/Desktop/projects/mikroskil/quill ((e5259e0...))
$

Commit Checkout Notes


  1. (master) menjadi ((e5259e0...))
  2. File yang ada di direktori utama sekarang adalah file pada versi pada commit e5259e0...
  3. Kita bebas melakukan kompilasi, test, hapus, diff, dkk pada file ini
  4. Segala perubahan yang dilakukan tidak akan tersimpan

Kembali ke Master

[email protected] ~/Desktop/projects/mikroskil/quill ((e5259e0...))
$ git checkout master
Previous HEAD position was e5259e0... tweak styles
Switched to branch 'master'

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$

Mari coba checkout untuk file:

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$ git checkout e5259e0 package.json

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$

File Checkout Notes


  1. Berbeda dengan checkout pada commit, di sini hanya 1 file yang berubah
  2. Perubahan file tersebut dapat tersimpan dalam git (coba jalankan git status)

Kembali ke File Terbaru

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$ git checkout HEAD package.json

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$

Mengubah Sejarah


Git Revert

Perintah:

$ git revert <commit>
  1. Revert akan membuat commit baru secara otomatis
  2. Ketika melakukan revert, sejarah kode tidak akan hilang
  3. Karenanya, operasi ini bisa dikatakan "aman" karena perubahan tercatat dalam sejarah

Contoh Penggunaan Revert (1)

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$ git log --oneline -2
7c1182f allow local sauce testing
b3a1f69 Update travis encrypted variables

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$ git revert b3a1f69
[master 7fa56ce] Revert "Update travis encrypted variables"
1 file changed, 2 insertions(+), 2 deletions(-)

Contoh Penggunaan Revert (2)

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$ git log --oneline -3
7fa56ce Revert "Update travis encrypted variables"
7c1182f allow local sauce testing
b3a1f69 Update travis encrypted variables

[email protected] ~/Desktop/projects/mikroskil/quill (master)
$

Ilustrasi Proses Revert

Menghapus Sejarah


Git Reset

Perintah:

$ git reset <option> <file>
  1. Secara sederhana sama dengan Checkout, tapi perubahan data dicatat
  2. Seperti Checkout, Reset memiliki banyak konfigurasi
  3. Bisa digunakan untuk: membersihkan staging area, menghapus sejarah
  4. Gunakan hanya untuk repository lokal. Ingat bahwa sejarah terhapus selamanya

Fungsi Git Reset 1

Membuang satu file dari staging area:

$ git reset <file>

Fungsi Git Reset 1 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git status
#   keterangan file staging..
#
#       modified:   FAQs.md
#       modified:   kode.txt
#

[email protected] ~/Desktop/code/tibk (master)
$ git reset FAQs.md
Unstaged changes after reset:
M       FAQs.md

Fungsi Git Reset 1 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git status
# Keterangan file staging...
#
#       modified:   kode.txt
#
# Keterangan file non-staging...
#
#       modified:   FAQs.md
#

Fungsi Git Reset 2

Membuang semua file dari staging area:

$ git reset

Fungsi Git Reset 2 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git status
# Keterangan file staging...
#
#       modified:   FAQs.md
#       modified:   kode.txt
#

[email protected] ~/Desktop/code/tibk (master)
$ git reset
Unstaged changes after reset:
M       FAQs.md
M       kode.txt

Fungsi Git Reset 2 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   FAQs.md
#       modified:   kode.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Fungsi Git Reset 3

Membuang semua file dari staging area dan mengembalikan isi file ke commit sebelumnya:

$ git reset --hard
  1. Seluruh perubahan file yang belum di-commit akan hilang
  2. Gunakan dengan sangat hati-hati, karena isi file tidak dapat dikembalikan lagi

Fungsi Git Reset 3 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git status
# Keterangan file staging...
#
#       modified:   FAQs.md
#       modified:   kode.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

[email protected] ~/Desktop/code/tibk (master)
$ git reset --hard
HEAD is now at f4c1204 Tambah 1 line

Fungsi Git Reset 3 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git status
# On branch master
nothing to commit, working directory clean

Fungsi Git Reset 4

Mengembalikan kode ke <commit>, tanpa menghapus file di staging:

$ git reset <commit>
  1. Biasanya digunakan untuk merapikan sejarah
  2. Misal: beberapa commit eksperimen yang tidak ingin dimasukkan ke sejarah
  3. Bisa juga menggunakan branch (pembahasan dua minggu depan)

Fungsi Git Reset 4 (cont.)

Asumsikan kita mengubah FAQs.md dan kode.txt:

$ git reset 946981
Unstaged changes after reset:
M       FAQs.md
M       kode.txt

[email protected] ~/Desktop/code/tibk (master)
# Keterangan Unstaged...
#
#       modified:   FAQs.md
#       modified:   kode.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Fungsi Git Reset 5

Mengembalikan kode ke <commit> dan menghapus file di staging:

$ git reset --hard <commit>
  1. Perintah akan menghapus seluruh data, baik di staging maupun commit.
  2. Guankan dengan sangat hati-hati.

Fungsi Git Reset 5 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git log --oneline -2
946981a Jadi apa
3894f43 kode.txt

[email protected] ~/Desktop/code/tibk (master)
$ git status
# Keterangan Unstaged...
#
#       modified:   FAQs.md
#       modified:   kode.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Fungsi Git Reset 5 (cont.)

[email protected] ~/Desktop/code/tibk (master)
$ git reset --hard 3894f43
HEAD is now at 3894f43 kode.txt

[email protected] ~/Desktop/code/tibk (master)
$ git status
# On branch master
nothing to commit, working directory clean

[email protected] ~/Desktop/code/tibk (master)
$ git log --oneline -2
3894f43 kode.txt
f97fe05 git ignore

Pertanyaan?