Git Advanced

        Pada artikel git sebelumnya sudah dibahas bagaimana cara kerja git secara sederhana hingga perubahan pada file akan tersimpan secara permanen di local repository folder git tersebut. Pada artikel kali ini akan dibahas mengenai branching, reset, stash, remote repository, serta contoh kasus yang sering terjadi pada saat memakai git di dunia nyata.

 

        Git branch adalah salah satu fitur dari git untuk mengatur timeline pada pengembangan / perubahan file tanpa mengganggu timeline utama, biasanya branch pada Git diperuntukan jika kita ingin menambahkan suatu fitur tertentu dalam fase pengembangan suatu aplikasi, tanpa mengganggu aplikasi yang sudah ada. Nantinya jika fitur tersebut tidak jadi dipakai tinggal di kembalikan ke commit yang sebelum terjadi merge branch fitur dan branch utama. Tidak ada batasan banyaknya branch yang bisa dibuat. sebagai gambaran bentuk branch pada git seperti ini.

        Hal perlu diperhatikan adalah jika kita baru membuat inisialisasi git pada suatu folder dan kita ingin menampilkan branch dan git tidak akan menampilkan nama branch utama sampai kita menyimpan suatu perubahan permanen pada local repository kita, atau sampai kita tarik data dari remote repository kita. Jika sudah menyimpan perubahan secara permanen di local repository biasanya akan terbentuk branch utama dengan nama branch master, untuk menampilkan semua branch yang ada beserta commit id dan commit message bisa menggunakan command “git branch –v”

        Lalu bagaimana jika kita ingin membuat branch baru dengan nama “feature/addfile2” ? kita bisa menggunakan command “git branch feature/addfile2” untuk membuat branch baru dengan nama “addfile2” dan command “git checkout feature/addfile2” untuk memindahkan branch ke “feature/addfile2”. Untuk mengecek apakah branch sudah berubah dengan command “git branch –v”

        Hal yang perlu diperhatikan dalam membuat branch adalah ketika kita membuat branch baru akan mengacu pada branch tempat kita membuat branch. Maksudnya adalah snapshot tempat dimana kita membuat branch baru akan di copy ke branch baru.

        Atau cara lainnya dengan menggunakan command “git checkout -b feature/addfile3” untuk membuat branch baru dengan nama “feature/addfile3” dan langsung pindah ke branch baru tersebut. Untuk mengecek branch sudah terbuat atau belum dengan command yang sama.

        Bagaimana jika kita ingin menghapus suatu branch? kita bisa menghapus branch dengan command “git branch <namaBranch> -d” dengan syarat kita tidak boleh berada pada branch yang mau dihapus.  

        Hal yang perlu diperhatikan jika kita melakukan perubahan file pada suatu branch dan kita mengganti branch, perubahan yang terjadi masih akan terbawa karena sifatnya masih ada di state working directory atau staging area bukan berada di local repository. Jika ingin menyimpan perubahan pada suatu branch kita harus melakukan commit pada perubahan yang ada, dengan demikian perubahan tersebut akan terekam pada branch tersebut. Sebagai gambaran praktiknya akan seperti ini:

Akan dibuat file2.txt yang isinya text file2.

Cek status file, terlihat masih berada di working directory lalu masukan file2.txt ke staging index.

        Cek status file, terlihat sudah berada di staging index, lalu pindah ke branch master, cek status file lagi, terlihat file yang kita lakukan perubahan di branch “feature/addfile2” akan terbawa ke branch master, karena kita belum menyimpan perubahannya secara permanen ke suatu local repository.

        Bagaimana jika kita sudah selesai dengan fitur pada branch baru lalu kita ingin melakukan merge ke branch utama? kita bisa melakukan merge branch dengan syarat kita harus pindah ke branch tempat kita ingin di merge, lalu kita menggunakan commandgit merge feature/addfile2” Sebagai gambaran praktik-nya:

        Lalu untuk mengecek perubahan sudah tergabung ke branch yang dituju dengan cek lognya dengan menggunakan command “git log –oneline” terlihat di sana kalau branch “master” dan “feature/addfile2” berada pada satu commit yang sama, artinya merge yang kita lakukan sudah berhasil.

        Mungkin ada kalanya kita ingin melakukan merge terhadap commit tertentu pada suatu branch, hal itu tidak bisa dilakukan dengan menggunakan git merge karena akan mengambil semua perubahan lalu di merge ke branch tujuan, untuk itu bisa dilakukan cherry pick terhadap commit pada branch “feature”, sebagai contoh pada branch “feature/addfile2” sudah dilakukan beberapa kali penyimpanan ke local repository sebagai berikut:

*Notes: setiap line pada file2.txt merepresentasikan suatu commit.

        Lalu kita hanya mau mengambil commit 6787959 ke branch “master”, caranya adalah dengan menggunakan cherry pick ke commit tersebut. Syaratnya sama seperti merge, kita harus pindah ke branch tujuan tempat dimana commit tersebut akan diambil. Lalu gunakan command “git cherry-pick 6787959”

Jika terjadi conflict bisa di resolve dengan membuka visual studio code:

        Dengan memilih perubahan mana yang mau disimpan, by default ketika kita sudah memilih perubahan mana yang ingin kita pakai, kita harus buat suatu commit sebagai representasi commit pada cherry-pick tadi, jika dipraktekkan akan seperti:

        Bagaimana jika kita ingin pindah ke branch lain tapi kita tidak ingin melakukan perubahan secara permanen di local repository? kita bisa memakai “git stash” untuk menyimpan perubahan sementara, syarat dari “git stash” adalah perubahan yang mau disimpan harus berada pada state staging area. Jika dicontohkan akan seperti:

Untuk melihat stash yang sudah tersimpan dengan menggunakan “git stash list”

Setelah kita melakukan stash, kita mengecek status file, akan didapatkan kalau perubahan pada state staging index akan hilang karena berada di state.

        Kalau kita ingin memakai perubahan pada stash, bisa dengan menggunakan command “git stash@{1} apply, dan perubahan yang terjadi akan disimpan pada state staging index.

        Bagaimana jika kita sudah melakukan banyak commit, tetapi kita ingin kembali ke commit tertentu? kita bisa menggunakan command “git reset <nomorCommit> –<parameter>”, perlu diketahui jika kita menggunakan “git reset”, kita akan kembali ke commit yang kita tuju dengan dan atau membawa perubahan pada working directory atau staging area. Command “git reset” memiliki 3 parameter yang akan menentukan apakah perubahan sekarang akan dibawa atau tidak. ketiga parameter tersebut adalah “–soft”, “–mixed”, “–hard”. Perbedaannya kalau “–soft”, akan membawa semua perubahan pada state working directory dan staging index, kalau menggunakan “–mixed”, perubahan yang dibawa hanya pada state working directory, kalau “–hard”, tidak ada perubahan yang dibawa ke commit tujuan.

        Sebagai contoh seperti gambar diatas, posisi kita sedang berada di commit nomor b7522d9, ingin pindah ke commit c55b667 dengan membawa file log.txt yang berada di staging index, maka bisa kita bisa menggunakan command “git reset c55b667 –soft” bisa dilihat kalau perubahan pada staging index ikut kebawa.

Bagaimana jika ingin memakai commit sebelum di-reset tetapi sudah terlanjur di-reset?

kita bisa menggunakan “git reflog” untuk melihat history yang ada pada branch kita sekarang. Lalu gunakan “git reset” ke posisi sebelum terjadi commit reset, jika dipraktekan akan seperti ini:


        Sekarang kita sudah mengerti cara git bekerja sepenuhnya di local repository, bagaimana jika kita ingin melakukan kolaborasi? Kita membutuhkan server terpusat dimana semua orang akan mengambil riwayat perubahan yang terjadi disana, terdapat syarat untuk menghubungkan local repository kita dengan remote repository yaitu kita harus membuat remote repository terlebih dahulu, sebagai contoh disini terdapat remote repository github https://github.com/jonathansantoso/tetst

        Lalu cara menghubungkan local repository dengan remote repository bisa dengan menggunakan command “git remote add origin https://github.com/jonathansantoso/tetstdan untuk mengetahui kita sudah terhubung ke remote repository dengan menggunakan command “git remote –v”.  Sebenarnya terdapat cara lain untuk terkoneksi dengan remote repository, tetapi cara ini bergantung dengan kondisi remote repository yaitu dengan command “git clone https://github.com/jonathansantoso/tetst” akan terbentuk replicate dari remote repository di local repository kita.


Lalu bagaimana jika kita ingin melakukan push perubahan yang sudah kita buat di local ke remote repository? Kita bisa menggunakan command “git push origin <namabranch>”

Untuk mengecek perubahan pada remote repository dengan menggunakan command “git fetch” dan untuk menarik perubahan data dari remote repository dengan menggunakan “git pull origin <namaBranch>”

Jonathan & Johanes