Dasar Branching dan Merging


Dasar Branching dan Merging

Halo teman-teman, di postingan kali ini kita akan belajar dasar-dasar dari branching dan merging pada Git. Bagi yang belum tau dengan istilah Branching dan Merging, mudahnya branching itu proses membuat cabang dari commit yang kita point saat ini. Dan Merging adalah proses menggabungkan beberapa cabang jadi satu. Kalo masih bingung kalian bisa membaca tulisan saya sebelumnya tentang Konsep dasar branch.

Supaya lebih paham kita akan menggunakan ilustrasi kasus yang sudah disediakan di website resmi Git nya. Jika kaliang ingin membaca dari website resminya kalian bisa klik disini.

Ilustrasi kasusnya seperti ini:

Basic Branching

Pertama, katakanlah kamu sedang mengerjakan sebuah website dan kamu sudah membuat beberapa commit.
commit history


Lalu kamu dapat masukkan untuk mengerjakan sebuah issue (mungkin fitur baru), sebut saja issue #53. Kamu ingin mengerjakan issue ini di sebuah branch baru, maka kamu membuat sebuah branch baru dan langsung berpindah ke branch itu. Untuk melakukannya kamu menggunakan perintah.
$ git checkout -b iss53
Switched to a new branch "iss53"
Kamu membuat beberapa commit di branch iss53 jadi histori commit seperti ini.

move forward in branch

Lalu kamu mendapat laporan terdapat bug di website dan kamu harus menyelesaikannya secepatnya. Kamu ingin berindah branch ke branch master. Catatan! jika kamu mempunyai pekerjaan di working direktori ketika masih di branch iss53 dan kamu tidak memindahkannya ke staging area dan ternyata pekerjaanmu itu memiliki conflict dengan file yang ada di branch mater, Git tidak akan mengizinkanmu untuk berpindah branch ke master. Lebih baik kamu pindahkan ke staging area terlebih dahulu semuanya.

Kamu pindah branch ke master.
$ git checkout master
Switched to branch 'master'
Saat ini working direktori mu akan berubah seperti saat kamu meninggalkanya di branch master. Lalu kamu mengerjakan bug tadi di sebuah branch baru bernama hotfix.
$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email address'
[hotfix 1fb7853] fixed the broken email address
 1 file changed, 2 insertions(+)
fix bug in hotfix

Lalu kamu test dan hasilnya tidak ada bug dan kamu siap untuk men-deploy nya ke production. Kamu me-merge branch hotfix dengan master.
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)
Kamu lihat ada tulisan Fast-forward , tulisan ini muncul karena commit yang kita tunjuk pada branch yang akan kita merge itu saling berhubungan jadi ini sama saja seperti commit biasa dan kita hanya memindahkan pointer branch master ke commit yang sama yang di tunjuk oleh branch hotfix.


setelah bug berhasil diatasi kamu bisa kembali mengerjakan branch iss53 tapi sebelum itu kamu perlu menghapus branch hotfix karena sudah tidak dibutuhkan lagi.
$ git branch -d hotfix
Deleted branch hotfix (3a0874c).
Kamu kembali ke branch iss53 dan melakukan beberapa commit.
$ git checkout iss53
Switched to branch "iss53"
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+)


Basic Merging

Sekarang kamu sudah selesai mengerjakan issue #53 dan kamu mau me-merge nya dengan branch master. Kamu memasukkan perintah.
$ git checkout master
Switched to branch 'master'
$ git merge iss53
Merge made by the 'recursive' strategy.
README |    1 +
1 file changed, 1 insertion(+)
Jika dilihat ini berbeda ketika kita me-merge hotfix dengan master tadi. Ini karena kedua branch tersebut (iss53 dan master) tidak terhubung secara langsung dan memiliki perbedaan. Dalam kasus ini Git melakukan simple three-way merge menggunakan dua snapshot dari dua branch (iss53 dan master) dan common ancestor.


Sebagai ganti dari memindahkan pointer branch ke depan (seperti fast-forward) Git membuat commit baru hasil dari merge yang dilakukan.

Penentuan Common ancestor dilakukan otomatis oleh Git, tidak seperti CVS lama yang mengharuskan developer untuk menentukannya sendiri.

Basic merge conflict

Kadang , ketika melakukan merge tidak selalu mulus. Kita mendapati konflik karena kita mengedit bagian yang sama di dua branch tersebut. Kita harus me-resolve terlebih dahulu baru bisa commit.

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div> 
>>>>>>> iss53:index.html 

Kita akan menemukan file yang conflict seperti ini ketika melakukan resolve. Ini menunjukkan dua kode dari dua branch yang saling konflik. Bagian HEAD menunjukkan kode dari branch master lalu dipisahkan ==== dan bagian setelahnya menunjukkan kode dari branch iss53. Kita harus membenarkannya menjadi seperti ini.

<div id="footer">
please contact us at email.support@github.com
</div>
Tanda-tanda sebelumnya jangan lupa untuk dihilangkan juga. Setelah selesai me-resolve baru kamu bisa melakukan merge.

Jika kamu masih bingung dengan branch dan merge kamu bisa menonton beberapa video dibawah.







Oke mungkin segitu dulu aja yang bisa saya bagikan ke kalian, jika kalian suka dengan postingan ini kalian bisa membagikannya ke teman-teman kalian. Kalian bisa subscribe supaya tidak ketinggalan postingan-postingan saya selanjutnya. Jangan sungkan juga untuk berkomentar ya.. Sampai jumpa lagi di postingan saya selanjutnya.
loading...

Comments