3 way merge terjadi jika last commit pada main branch sudah berbeda dibanding ketika branch baru dibuat. Contohnya, saat kita sedang bekerja di branch baru, ada developer lain yang melakukan penambahan commit pada main branch.

Masih melanjutkan dari contoh soal dari tutorial sebelumnya, kita buat perubahan pada fitur01 branch, misalnya menambahkan h1 styling pada main.css, kemudian melakukan commit.
git commit -am "add h1 styling"
Perhatikan disini digunakan git commit -am untuk melakukan add dan commit dengan satu perintah (kita tidak perlu melakukan perintah git add). Hal ini dapat dilakukan untuk file yang sudah ada.
Kemudian buat 1 commit lagi dengan menambahkan perubahan pada main.css dan commit. Contoh menambahkan paragraph styling.
JIka kita check commit history, commit sudah disimpan.
git commit -am "add paragraph styling"
[fitur01 fb045ba] add paragraph styling
1 file changed, 4 insertions(+)
$ git log --oneline
fb045ba (HEAD -> fitur01) add paragraph styling
377b8a0 add h1 styling
40e966b (origin/fitur01, main) Add paragraph fitur01
39cb8a7 (origin/main) Add header
cd46806 add aboutus.html
045e189 Add .gitignore
36878f7 layout dasar
Berikutnya kita pindah ke main/master branch.
$ git checkout main
Untuk mengemulasi skenario dimana main branch terjadi perubahan sebelum proses merge, kita lakukan perubahan pada file index.html.
$ git commit -am "Add paragraph index.html"
[main b2987ac] Add paragraph index.html
1 file changed, 1 insertion(+)
Sebelum kita merge, mari check terlebih dahulu commit history, dapat dilihat penambahan sudah berhasil dicommit.
$ git log --oneline
b2987ac (HEAD -> main) Add paragraph index.html
40e966b (origin/fitur01) Add paragraph fitur01
39cb8a7 (origin/main) Add header
cd46806 add aboutus.html
045e189 Add .gitignore
36878f7 layout dasar
Berikutnya kita coba merge dengan branch fitur01. Kondisi saat ini main branch sudah berubah sebelum kita melakukan merging.
$ git merge fitur01
Merge made by the 'recursive' strategy.
main.css | 8 ++++++++
1 file changed, 8 insertions(+)
Dapat dilihat tipe merge diatas adalah tipe 3 way merging dengan menggunakan ‘recursive’ strategy. Jika kita periksa commit history, HEAD pointer hanya akan menunjuk ke main branch, karena last commit pada main tidak sama dibandingkan saat branch fitur01 dibuat.
git log --oneline
b8e1e75 (HEAD -> main) Merge branch 'fitur01'
b2987ac Add paragraph index.html
fb045ba (fitur01) add paragraph styling
377b8a0 add h1 styling
40e966b (origin/fitur01) Add paragraph fitur01
39cb8a7 (origin/main) Add header
cd46806 add aboutus.html
045e189 Add .gitignore
36878f7 layout dasar
- commit id fb045ba dan 377b8a0 adalah hasil merging dari branch fitur01.
- commit id b2987ac adalah perubahan yang terjadi pada main/master branch sebelum dilakukan mergin.