Git, Kenapa?

Kustiawanto Halim
Auto Personalia
Published in
5 min readMar 21, 2017

Apa sih yang membuat Git berbeda dengan Version Control yang lainnya? Perbedaan antara Git dengan VCS lainnya terlihat pada data apa yang disimpan sebagai pencatatan perubahan file. Pada VCS yang lainnya, data akan disimpan berupa list dari perubahan file-based. Maksudnya adalah sistem ini akan menyimpan informasi berupa sekumpulan file lalu perubahan apa saja yang kita lakukan terhadap file tersebut.

Menyimpan file dan perubahan yang dilakukan terhadap file tersebut

Sementara itu, apa yang dilakukan oleh Git dalam pencatatan perubahan pada file? Berbeda dengan sistem VCS lainnya, Git akan menyimpan data yang ada sebagai snapshots miniatur keseluruhan sistem file. Maksudnya, ketika melakukan commit atau menyimpan state dari project kedalam Git, maka keseluruhan file yang ada akan disimpan gambarannya kedalam sebuah snapshots. Tentu saja terdapat penghematan dari sisi penyimpanan yang dilakukan Git, yaitu untuk file yang sama tidak akan disimpan ulang, melainkan hanya akan disimpan reference link menuju file sebelumnya.

Penyimpanan berupa snapshots dari keseluruhan project

Hal inilah yang menjadi pembeda antara Git dengan VCS lainnya, dimana Git akan menyerupai mini file system yang dapat dilengkapi dengan tools keren lainnya, dibandingkan dengan VCS sederhana lainnya.

Git Workflow

Hal yang sangat penting untuk dipahami dari Git adalah workflow dari Git itu sendiri. Terdapat tiga keadaan yang harus diingat pada Git yaitu: commited, modified, dan staged. Commited adalah ketika data yang ada sudah secara aman disimpan pada database local git. Modified adalah kondisi dimana kita melakukan perubahan terhadap data yang ada tetapi belum melakukan commit. Staged adalah kondisi dimana kita sudah menandai data yang diubah pada versi saat ini, untuk menjadi commit snapshot selanjutnya.

Setelah memahami ketiga keadaan diatas, maka kita akan mendapatkan tiga bagian utama dari Git project, yaitu Git Directory, working tree, dan staging area.

Git Workflow

Git directory merupakan tempat dimana Git menyimpan metadata dan object database untuk project kita. Ini adalah bagian terpenting dari Git dan ini adalah hal yang kita pindahkan ketika kita melakukan clone repository.

Working tree adalah sebuah checkout dari suatu versi project yang ada. File yang ada akan di-pull dari Git directory dan ditempatkan pada folder dimana kita akan bekerja untuk melakukan modifikasi file.

Staging area adalah sebuah file, biasanya berada pada Git directory. File ini akan menyimpan informasi mengenai data mana saja yang akan masuk kedalam commit berikutnya. File ini biasanya disebut “index”, tapi biasa juga disebut staging area.

Apabila dirangkum, secara umum berikut adalah workflow dari Git:

  1. Melakukan modifikasi terhadap file yang ada pada working tree.
  2. Melakukan staging terhadap file yang dimodifikasi, menambahkan snapshots pada staging area.
  3. Melakukan commit, dimana akan menyimpan data snapshot yang ada pada staging area untuk disimpan secara permanent pada Git directory.

Apabila terdapat suatu versi file pada Git directory, maka file itu dinyatakan commited. Apabila file yang tadinya dimodifikasi dan ditambahkan ke staging area, maka file tersebut dinyatakan staged. Apabila file tersebut belum di staged, maka dia dinyatakan modified.

I know the theory, then?

Setelah mengetahui teori penggunaan dari Git, saya akan menjelaskan beberapa hal dasar yang harus dipahami dari Git. Bisa dikatakan ini adalah cheatsheet Git sederhana.

Setup

  • Untuk mengetahui lokasi Git diinstal which git
  • Mengetahui versi Git terinstall git --version
  • Help git help

General

  • Melakukan inisialisasi git init
  • Melakukan staging terhadap seluruh file git add .
  • Melakukan staging terhadap file tertentu git add index.html
  • Melakukan commit terhadap perubahan yang ada git commit -m "Message"
  • Menghapus file dari Git git rm index.html
  • Melakukan undo terhadap commit yang sudah dilakukan git checkout -- index.html
  • Melakukan restore file dari commit tertenti git checkout 6eb715d -- index.html

Reset

  • Kembali pada commit tertentu git revert 073791e7dd71b90daa853b2c5acc2c925f02dbc6
  • Undo commit terakhir yang dilakukan git reset --soft ~HEAD

Branch

  • Melihat branch apa saja yang ada git branch
  • Membuat sebuah branch baru git branch branchname
  • Pindah ke branch tertentu git checkout branchname
  • Membuat dan pindah ke branch baru git checkout -b branchname
  • Melakukan penamaan ulang pada suatu branch git branch -m branchname new_branchname atau git branch --move branchname new_branchname
  • Menghapus branch yang ada git branch -D branch_to_delete

Merge

  • Melakukan merge (apabila terjadi fast forward) git merge branchname
  • Merge ke master (jika fast forward) git merge --ff-only branchname
  • Merge ke master (mode paksa) git merge --no-ff branchname
  • Menghentikan merge (jika konflik) git merge --abort
  • Menghentikan merge (jika konflik) git reset --merge // untuk v1.7.4
  • Melakukan merge hanya pada commit tertentu git cherry-pick 073791e7

Stash

  • Memasukkan file ke dalam stash git stash save "Message"
  • Melihat stash git stash list
  • Melihat status stash git stash show stash@{0}
  • Melihat perubahan stash git stash show -p stash@{0}
  • Menghapus item custom stash git stash drop stash@{0}
  • Menghapus stash keseluruhan git stash clear

Compare

  • Melakukan komparasi atas file yang dimodifikasi git diff
  • Melakukan komparasi pada modified file dan memberikan highlight pada perubahan yang ada git diff --color-words index.html
  • Komparasi modified file pada tahap staging git diff --staged
  • Melakukan komparasi branch git diff master..branchname
  • Melakukan komparasi commit git diff 6eb715d git diff 6eb715d..HEAD git diff 6eb715d..537a09f
  • Komparasi file pada suatu commit git diff 6eb715d index.html git diff 6eb715d..537a09f index.html

Gitignore

Adalah sekumpulan file yang akan di ignore oleh Git. Template yang biasa digunakan dalam Gitignore ada di https://github.com/github/gitignore

Kesimpulan

Penggunaan Git akan sangat membantu pekerjaan terutama programmer dan designer ataupun pekerjaan lainnya yang membutuhkan versioning dalam pekerjaannya sehingga mempermudah pekerjaan apabila ingin melakukan perubahan atau memperhatikan perubahan yang ada dari file-file yang digunakan.

Referensi: https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

--

--

Kustiawanto Halim
Auto Personalia

Mobile Apps Developer (Android, iOS, Flutter) | IoT enthusiast