Lanjutan materi dari Belajar Git Pemula bagian pertama tentang Memahami Penggunaan Git dari Dasar — Menggunakan contoh proyek atau repositori yang sudah dibuat sebelumnya.
Cabang di Git pada dasarnya adalah hanya sebagai penunjuk (pointer) ke commit yang kita buat, dan terus bergerak maju berpindah urutan penunjukan, menunjuk ke commit terakhir.
Contohnya seperti berikut. Mari kita jalankan perintah git log --oneline --decorate
untuk melihat commit terakhir yang sudah dibuat.
➜ belajar-git git:(master) git log --oneline --decorate 7e5559d (HEAD -> master) Menambahkan file style.css dan title index.html diubah 4055404 first commit
Selanjutnya mari kita buat perubahan atau memodifikasi file dan buat commit baru. Sebagai contoh, kita edit file style.css dan tambahkan css sederhana:
//style.css body { background-color: #f9f9f9; }
Setelah itu langsung kita lakukan commit.
git commit -a -m 'Mengubah warna latar belakang default'
Opsi -a
(--all) pada perintah commit diatas akan otomatis menambahkan file yang dimodifikasi ke staging area.
➜ belajar-git git:(master) git commit -a -m 'Mengubah warna latar belakang default' [master b66bd59] Mengubah warna latar belakang default 1 file changed, 3 insertions(+)
Setelah commit, kambali kita jalankan git log --oneline --decorate
.
➜ belajar-git git:(master) git log --oneline --decorate b66bd59 (HEAD -> master) Mengubah warna latar belakang default 7e5559d Menambahkan file style.css dan title index.html diubah 4055404 first commit
Penunjukan telah bergeser. Commit pada urutan pertama yang terdapat HEAD
dan cabang master
diatas adalah commit terakhir atau terbaru yang ditunjuk.
Jika digambarkan, terlihat seperti berikut:
Commit terakhir yang dibuat atau yang terbaru pada cabang disebut sebagai ujung cabang, dan ujung cabang direferensikan oleh kepala cabang, dan kepala cabang ditunjuk langsung oleh HEAD
.
HEAD
sendiri adalah pointer (penunjuk) khusus yang digunakan untuk mengetahui cabang saat ini atau yang sedang digunakan.
Karena kita dapat membuat lebih dari satu cabang dan dapat berganti cabang, HEAD
akan menunjukan di cabang mana saat ini.
Jika kita lihat di dalam direktori .git repositori, disitu terdapat file bernama HEAD yang merupakan tempat dimana informasi rujukan atau referensi ke kepala cabang saat ini.
Kita bisa jalan perintah cat .git/HEAD
untuk melihatnya.
➜ belajar-git cat .git/HEAD ref: refs/heads/master
Output diatas adalah nama referensi cabang dengan jalur referensi ke kepala cabang yang lengkap. Namun Git sering menggunakan nama yang lebih singkat, yaitu nama cabang itu sendiri.
Jalankan git branch
untuk melihatnya.
➜ belajar-git git branch * master
Nama referensi lengkap biasanya digunakan jika terdapat cabang dengan nama yang sama.
Baik cabang lokal, remote cabang, dan tag semuanya adalah referensi ke commit. File referensi disimpan di .git/refs
sesuai referensi.
Membuat Cabang Baru
Sekarang mari kita coba membuat cabang baru dan melihat seperti apa penunjukan yang akan dilakukan HEAD
jika kita memiliki lebih dari satu cabang.
Untuk membuat cabang baru, kita gunakan perintah git branch <nama-cabang>
:
➜ belajar-git git branch todo
'todo' adalah contoh nama untuk cabang baru yang akan dibuat, jika ingin nama lain silahkan sesuaikan.
Setelah cabang baru dibuat, sekarang kita memiliki dua cabang lokal, master
dan todo
, dan cabang yang aktif saat ini adalah 'master' — yang diberi tada bintang:
➜ belajar-git git branch * master todo
Lalu setelah cabang baru dibuat apa yang terjadi? Ketika kita mambuat cabang baru, maka yang terjadi adalah commit saat ini memiliki pointer baru, yaitu 'todo'.
Jalankan perintah git log --oneline --decorate
untuk melihatnya:
➜ belajar-git git:(master) git log --oneline --decorate b66bd59 (HEAD -> master, todo) Mengubah warna latar belakang default 7e5559d Menambahkan file style.css dan title index.html diubah 4055404 first commit
Gambarannya seperti barikut:
Pointer HEAD
saat ini sedang menunjuk ke cabang 'master', yang berarti cabang saat ini atau yang sedang digunakan saat ini adalah 'master'.
Semua commit yang ada saat ini adalah milik 'master', dan jika kita membuat commit baru, maka commit baru tersebut masih milik 'master'. Kenapa demikian? Karena kita masih di cabang 'master', dan belum beralih cabang.
Selanjutnya mari kita coba beralih ke cabang 'todo' dan kemudian membuat commit baru. Kita lihat apa yang terjadi.
Jalankan perintah git checkout <nama-cabang>
untuk beralih cabang:
➜ belajar-git git checkout todo
Jika versi Git yang digunakan v2.23 atau diatasnya, bisa juga menggunakangit switch
yang sama fungsinya sepertigit checkout
.
➜ belajar-git git:(master) git switch todo Switched to branch 'todo' ➜ belajar-git git:(todo) git log --oneline --decorate b66bd59 (HEAD -> todo, master) Mengubah warna latar belakang default 7e5559d Menambahkan file style.css dan title index.html diubah 4055404 first commit
Kita sudah berada di cabang 'todo'. Dan HEAD
saat ini menunjuk ke cabang 'todo'.
Selanjutnya mari kita buat perubahan dan membuat commit baru. Untuk contoh, kita tambahkan css untuk mengubah warna teks elemen <h1>:
//style.css body { background-color: #f9f9f9; }; h1{ color: red; }
git commit -a -m 'Membuat perubahan warna teks heading'
➜ belajar-git git:(todo) git commit -a -m 'Membuat perubahan warna teks heading' [todo fca505d] Membuat perubahan warna teks heading 1 file changed, 4 insertions(+)
Setelah commit baru dibuat, kita lihat kembali riwayat commit:
➜ belajar-git git:(todo) git log --oneline --decorate fca505d (HEAD -> todo) Membuat perubahan warna teks heading b66bd59 (master) Mengubah warna latar belakang default 7e5559d Menambahkan file style.css dan title index.html diubah 4055404 first commit
Proyek kita saat ini telah menyimpang dari versi sebelumnya. Seperti memiliki dua versi proyek. Setiap perubahan yang kita lakukan akan terikat, atau hanya dikaitkan sesuai cabang yang digunakan saat perubahan itu dibuat.
Apapun yang kita buat, atau perubahan apapun yang kita kerjakan saat berada di cabang 'todo', tidak akan ada atau tidak terlihat di cabang 'master'.
Cabang saat ini adalah 'todo', mari kita beralih ke cabang 'master'.
➜ belajar-git git:(todo) git switch master Switched to branch 'master'
Setelah kita beralih ke cabang 'master', maka versi proyek berubah, file atau kode dikembalikan ke versi lama. Kita hanya menggunakan snapshot yang sebelumnya kita commit di cabang 'master'.
Jika kita buka file style.css, maka css (h1) yang kita tambahkan sebelumnya saat di cabang 'todo', tidak ada.
//style.css body { background-color: #f9f9f9; };
Proyek kita saat ini telah kembali ke versi sebelumnya. Kembali ke versi yang lebih lama. Selanjutnya mari kita lihat apa yang akan terjadi jika kita buat commit baru setelah kembali ke cabang 'master'.
Mari kita tambahkan tag 'link' pada file index.html, lalu buat commit baru.
//index.html ... <title>Hello World!</title> <link rel="stylesheet" href="style.css"> ...
git commit -a -m 'Menambahkan tag link external css'
Jalankan perintah git log --oneline --decorate --graph --all
untuk melihat semua riwayat commit dan cabang yang menyimpang.
➜ belajar-git git:(master) git log --oneline --decorate --graph --all * cc8c0ff (HEAD -> master) Menambahkan tag link external css | * 3ac0102 (todo) Membuat perubahan warna teks heading |/ * 729f5bb Mengubah warna latar belakang default * 904d7cb Menambahkan file style.css dan title index.html diubah * 1b65745 first commit
Saat commit baru di cabang 'master' ditambahkan, maka kita memiliki snapshot yang baru, dan garis perkembangan berada di jalur terpisah. Garis perkembangan saat ini tidak lagi dalam satu baris, melainkan menyimpang atau bercabang.
Berikut gambarannya:
Jadi dengan membuat cabang baru, kita memiliki jalur pengembangan lain yang membuat setiap perubahan diisolasi di cabang terpisah.
Jika di praktekkan dalam pengembangan suatu proyek, kita dapat dengan mudah membuat salinan proyek untuk percobaan fitur atau pengembangan fitur tanpa menyentuk kode utama, sehingga kerusakan kode atau hal lain yang tidak diinginkan dapat diantisipasi.
Kita bisa bolak-balik antar cabang dengan perubahan dan pengembangan yang terpisah, dan apabila pengembangan fitur pada cabang selesai dilakukan dan telah siap, maka kita dapat menggabungkannya dengan cabang utama.
Selesai
Dengan adanya cabang di Git, pekerjaan kita dapat menyimpang dari jalur utama pengembangan, dan kita dapat terus melakukan pekerjaan tanpa mengacaukan jalur utama.
Silahkan pelajari kembali apa yang sudah dibuat diatas, dan lakukan eksperimen. Belajar Git dasar bagian #2 selesai.
Tip! Jika menggunakan PowerShell di windows, bisa mempercantiknya dengan menambahkan modul seperti Oh My Posh yang dapat menampilkan status cabang Git.
Lihat Cara Install Oh My Posh di PowerShell