Lanjutan materi dari Belajar Git Pemula bagian pertama tentang Memahami Penggunaan Git dari Dasar — Menggunakan contoh proyek atau repositori yang sudah dibuat sebelumnya.
Di pembahasan Percabangan Git Dasar sebelumnya, kita telah mempelajari cara kerja Cabang (branch), dan mencoba menambahkan cabang baru, serta melihat penyimpangan antar cabang yang terjadi.
Saat ini kita memiliki dua cabang pada repositori yang dibuat sebelumnya. Kita memiliki 'master' sebagai cabang utama proyek, dan 'todo' sebagai cabang pengembangan proyek.
Proyek kita saat ini masih dalam dua versi pengembangan dengan cabang yang menyimpang, dimana pekerjaan yang kita buat di cabang 'todo' tidak terkandung di cabang utama 'master'.
Dalam pengembangan suatu proyek, jika tujuan kita membuat cabang baru adalah untuk pengembangan fitur, perbaikan, pengujian ataupun bereksperimen, dan hasilnya sesuai dengan yang kita inginkan, maka langkah terakhir yang perlu kita lakukan adalah melakukan penggabungan cabang pengembangan lain ke cabang utama untuk diterapkan pada proyek.
Dan sebagai lanjutan dari materi percabangan di Git berikutnya, pembahasan kita saat ini adalah mengenai proses penggabungan cabang dasar.
Penggabungan Cabang
Untuk menggabungkan cabang, perintah yang digunakan adalah git merge
dan dengan nama cabang yang akan digabungkan.
git merge <nama-cabang>
Strategi Penggabungan
Menyesuaikan kebutuhan kita dalam membuat cabang, terdapat strategi penggabungan dalam proses penggabungan cabang yang dilakukan oleh Git.
Strategi penggabungan ini akan melihat seperti apa riwayat pengembangan kita, dan kita dapat menentukan kapan harus melakukan penggabungan.
Proses penggabungan juga tidak selalu berjalan mulus, terkadang terjadi kesalahan atau konflik penggabungan yang mengakibatkan gagalnya penggabungan.
Proses penggabungan ini akan melihat, apakah terjadi penyimpangan setelah cabang dibuat, apakah terjadi perubahan di bagian yang sama dari file yang sama di cabang yang berbeda, atau riwayat komit dari cabang yang dapat capai.
Fast-Forward
Metode penggabungan cabang yang akan dibahas pertama adalah penggabungan 'fast-forward'. Penggabungan 'fast-forward' atau 'maju-cepat' adalah penggabungan yang hanya memindahkan ujung cabang nenek moyang ke cabang pengembangan cabang. Seperti menimpa. Cabang utama menunjuk ke cabang yang digabungkan.
Penggabungan 'fast-forward' akan terjadi ketika riwayat commit dapat dicapai, dan tidak terjadi penyimpangan pada cabang utama setelah cabang baru dibuat.
Artinya, setelah kita membuat cabang baru, kemudian langsung membuat perubahan dan commit di cabang baru tersebut, dan di cabang utama tidak ada modifikasi yang dilakukan, maka penggabungan akan disederhanakan dengan menggeser pointer ke depan.
Contoh Penggabungan Pertama
Saat ini kita memiliki 2 cabang pada repositori yang dibuat sebelumnya. Cabang tersebut tidak kita gunakan sekarang untuk digabungan. Kita akan buat cabang baru untuk contoh penggabungan 'fast-forward' ini.
Sebagai contoh, anggap saja dalam pengembangan proyek ada bagian yang perlu di perbaiki dan kita kerjakan di cabang baru.
Mari kita buat cabang baru dengan nama 'perbaikan01'. Kita coba gunakan perintah git checkout -b <nama-cabang>
untuk membuat dan beralih cabang pada waktu yang sama.
git checkout -b perbaikan01
➜ belajar-git git:(master) git checkout -b perbaikan01 Switched to a new branch 'perbaikan01' ➜ belajar-git git:(perbaikan01)
Saat ini kita berada di cabang 'perbaikan01'. Mari kita buat perubahan di salah satu file lalu commit. Sebagai contoh, kita edit file style.css:
body { background-color: #222222; }
Setelah itu langsung kita lakukan commit:
git commit -a -m 'Background default diubah ke warna gelap'
➜ belajar-git git:(perbaikan01) git commit -a -m 'Background default diubah menjadi warna gelap' [perbaikan01 29c8742] Background default diubah menjadi warna gelap 1 file changed, 1 insertion(+), 1 deletion(-)
Setelah commit selesai kita lakukan di cabang 'perbaikan01', selanjutnya kita kembali ke cabang 'master'.
➜ belajar-git git:(perbaikan01) git switch master Switched to branch 'master'
Setelah berada di cabang 'master', langsung kita lakukan penggabungan (merging).
git merge perbaikan01
Hasilnya seperti berikut:
➜ belajar-git git:(master) git merge perbaikan01 Updating 3b91dda..29c8742 Fast-forward style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Hasil penggabungan ini mengambil komit dari cabang yang kita gabungkan dan menempatkannya pada ujung cabang yang digabungkan. Dan tidak membuat snapshot baru. Hanya bergeser ke komit terakhir pada cabang yang kita gabungkan.
Jika kita lihat riwayat commit, hasilnya seperti di bawah ini. Cabang utama 'master' dan cabang 'perbaikan01' menunjuk ke snapshot commit yang sama.
➜ belajar-git git:(master) git log --oneline --decorate --graph --all * 29c8742 (HEAD -> master, perbaikan01) Background default diubah ke warna gelap * 3b91dda Menambahkan tag link external css | * a971e7b (todo) Membuat perubahan warna teks heading |/ * b2714ea Mengubah warna latar belakang default * c2fbc0e Menambahkan file style.css dan title index.html diubah * fc1f8cf first commit
Menghapus Cabang
Karena cabang 'perbaikan01' sudah tidak digunakan lagi, kita bisa langsung menghapusnya. Disini kita pelajari bagaimana menghapus cabang.
Untuk menghapus cabang di Git, kita gunakan perintah git branch
dengan opsi -d
dan nama cabang yang akan di hapus, seperti di bawah ini.
➜ belajar-git git:(master) git branch -d perbaikan01 Deleted branch perbaikan01 (was 29c8742).
Three-Way Merge
Setelah selesai di penggabungan 'fast-forward', kita ke metode penggabungan lainnya, yaitu Three-Way Merge atau penggabungan tiga arah.
Penggabungan tiga arah akan digunakan ketika kita membuat perubahan pada cabang utama setelah cabang baru di buat dan commit.
Karena ketika kita melakukan pengembangan fitur atau perbaikan di cabang baru, dan di cabang utama juga terus kita kerjakan dan membuat commit baru, maka commit pada cabang tempat kita berada akan berada di titik yang bukan nenek moyang langsung.
Jalur Pengembangan Saat Ini
Supaya lebih jelas, mari kita lihat riwayat pengembangan kita saat ini. Karena sebelumnya pada saat kita membuat cabang 'todo' dan membuat commit, kita juga telah melakukan pekerjaan lain di cabang utama 'master', yaitu membuat commit dan melakukan penggabungan cabang, sehingga commit di cabang utama saat ini berada di titik yang bukan nenek moyang langsung.
Karena riwayat pengembangan telah menyimpang dari beberapa titik yang lebih lama, dan commit nenek moyang tidak dapat dicapai, maka penunjuk cabang tidak dapat digeser atau dimajukan ke depan seperti yang terjadi pada penggabungan 'fast-forward'.
Oleh karena itu pada posisi ini, Git melakukan penggabungan tiga arah menggunakan dua snapshot yang ditunjuk oleh ujung cabang dan nenek moyang yang sama dari keduanya.
Sampai disini mari kita coba gabungkan cabang 'todo' ke cabang utama.
Membuat Commit Baru
Kita akan tambahkan dahulu commit baru di cabang 'todo' untuk menciptakan garis pengembangan baru. Jika cabang yang aktif saat ini adalah 'master', kita beralih terlebih dahulu ke cabang 'todo'.
git switch todo
Setelah berada di cabang 'todo', mari kita edit file style.css kemudian commit.
h1{ color: white; }
git commit -a -m 'Teks heading diubah ke warna putih'
➜ belajar-git git:(todo) git commit -a -m 'Teks heading diubah ke warna putih' [todo 9ec91be] Teks heading diubah ke warna putih 1 file changed, 1 insertion(+), 1 deletion(-)
Setelah commit di cabang 'todo' dibuat, kita kembali ke cabang 'master', kemudian langsung kita lakukan merging.
git switch master
git merge todo
Jika tidak ada kesalahan atau konflik yang terjadi, maka hasil output-nya terlihat seperti di bawah ini:
➜ belajar-git git:(master) git merge todo Auto-merging style.css Merge made by the 'recursive' strategy. style.css | 4 ++++ 1 file changed, 4 insertions(+)
Jika kita lihat riwayat commit, terlihat seperti di bawah ini:
➜ belajar-git git:(master) git log --oneline --decorate --graph --all * e6efe35 (HEAD -> master) Merge branch 'todo' |\ | * 9ec91be (todo) Teks heading diubah ke warna putih | * a971e7b Membuat perubahan warna teks heading * | 29c8742 Background default diubah ke warna gelap * | 3b91dda Menambahkan tag link external css |/ * b2714ea Mengubah warna latar belakang default * c2fbc0e Menambahkan file style.css dan title index.html diubah * fc1f8cf first commit
Berbeda dengan 'fast-forward' yang hanya memindahkan pointer ke depan — penggabungan tiga arah menghasilkan snapshot baru, dan secara otomatis juga membuat commit baru yang disebut commit gabungan.
Jika digambarkan, terlihat seperti gambar berikut:
Sampai disini cabang 'todo' telah selesai digabungkan ke cabang utama.
Selesai
Kita telah mempelajari bagaimana proses dan cara penggabungan cabang di Git. Pembahasan mengenai penggabungan cabang selesai sampai disini. Kiranya dapat dipahami. Silakan dicoba dan lakukan eksperimen.