- Bab 6 dari 8
- 35 menit
- 4 soal kuis
Branch, Merge, Rebase, dan Merge Conflict
Di bab ini (10 bagian)
Tujuan bab ini
- Menjelaskan branch sebagai penunjuk ringan dan HEAD sebagai penanda posisi kamu sekarang.
- Membuat dan berpindah branch dengan
git branchdangit switch -c. - Membedakan fast-forward merge, merge commit, dan rebase, serta tahu kapan memakai masing-masing.
- Menyelesaikan merge conflict, atau membatalkannya dengan
git merge --abort.
Branch itu cuma penunjuk
Branch sering dibayangkan sebagai salinan seluruh proyek. Kenyataannya jauh lebih ringan: branch hanyalah penunjuk ke satu commit. Isinya cuma hash 40 karakter. Coba intip:
Setiap kali kamu commit, penunjuk branch yang aktif ikut maju ke commit baru. Karena itu membuat branch terasa instan, bahkan di proyek raksasa.
HEAD adalah penunjuk ke branch yang sedang aktif. Di git log kamu melihatnya sebagai (HEAD -> main), yang artinya "kamu sedang di branch main". Pindah branch berarti memindahkan HEAD, lalu Git menyesuaikan isi working directory dengan commit yang ditunjuk branch tersebut.
Beberapa istilah yang akan sering kamu dengar:
- main (dulu sering bernama master): branch utama yang berisi kode stabil.
- feature branch: branch untuk mengerjakan satu fitur, misalnya
feature/login. - merge: menyatukan dua branch.
Pakai awalan yang konsisten seperti feature/, bugfix/, hotfix/, atau release/ supaya seluruh tim langsung paham isi setiap branch.
Membuat dan berpindah branch
git switch hadir sejak Git 2.23 untuk menggantikan peran git checkout yang terlalu banyak tugas. git checkout -b feature/login masih berfungsi dan hasilnya setara dengan git switch -c, jadi jangan kaget kalau menemukannya di tutorial lama.
Pastikan working directory bersih (sudah di-commit) sebelum pindah branch. Kalau perubahanmu bentrok dengan branch tujuan, Git akan menolak pindah demi melindungi editanmu.
Merge: fast-forward vs merge commit
Selesai mengerjakan fitur? Pindah ke branch tujuan, lalu merge:
Ada dua kemungkinan hasil.
1. Fast-forward. Kalau main tidak bertambah commit sejak feature/login dibuat, Git cukup menggeser penunjuk main ke depan. Tidak ada commit baru yang dibuat:
2. Merge commit. Kalau kedua branch sama-sama punya commit baru, Git membuat satu merge commit dengan dua induk:
Grafiknya menunjukkan dua jalur yang bertemu kembali. Riwayat asli tetap utuh dan jujur: kamu bisa melihat kapan fitur dikerjakan terpisah.
Rebase: riwayat yang lurus
git rebase memindahkan commit branch-mu supaya seolah dibuat di atas commit terbaru branch lain:
Sebelum rebase, feature/profil bercabang dari commit lama. Sesudahnya:
Commit "Halaman profil" sekarang duduk tepat di atas main, dan hash-nya berubah (sebelumnya 92ab476). Merge ke main setelah itu menjadi fast-forward, sehingga riwayatnya lurus tanpa merge commit.
Hash yang berubah itulah sumber bahayanya. Rebase menulis ulang commit. Kalau commit tersebut sudah di-push dan dipakai orang lain, riwayat mereka dan riwayatmu jadi tidak cocok.
Kapan merge, kapan rebase?
| merge | rebase | |
|---|---|---|
| Riwayat | asli, bercabang | lurus, ditulis ulang |
| Commit tambahan | merge commit | tidak ada |
| Aman untuk branch bersama | ya | tidak |
Aturan praktis yang dipegang banyak tim:
- Pakai rebase untuk merapikan branch lokal milikmu sendiri sebelum dibagikan, misalnya untuk mengejar
mainterbaru. - Pakai merge untuk menyatukan branch ke
mainatau branch yang dipakai bersama. - Jangan pernah rebase branch publik yang sudah di-push dan dipakai orang lain.
Merge conflict
Conflict terjadi kalau dua branch mengubah baris yang sama di berkas yang sama. Git tidak bisa menebak versi mana yang benar, jadi keputusannya diserahkan ke kamu. Ini normal dan bukan tanda kamu berbuat salah.
Buka berkasnya dan kamu akan menemukan penanda konflik:
- Di antara
<<<<<<< HEADdan=======ada versi branch aktif (yang sedang menerima merge). - Di antara
=======dan>>>>>>> feature/judulada versi dari branch yang digabung.
Empat langkah menyelesaikannya:
- Identifikasi:
git statusmenampilkanboth modified: index.html(atauUUdigit status -s). - Perbaiki: edit berkas, pilih salah satu versi atau gabungkan keduanya, lalu hapus semua penanda
<<<<<<<,=======, dan>>>>>>>. - Tandai selesai:
git add index.html. - Tutup merge:
git commit(ataugit rebase --continuekalau konflik muncul saat rebase).
Belum siap memutuskan? git merge --abort membatalkan merge dan mengembalikan semuanya ke kondisi sebelum merge. Ada juga git mergetool yang membuka alat bantu visual, dan editor seperti VS Code menyediakan tombol "Accept Current / Incoming / Both" untuk hal yang sama.
Kesalahan umum
- Commit di branch yang salah. Selalu cek
git statusataugit branchsebelum mulai bekerja. - Merge dari arah terbalik.
git merge Xmenarik X ke branch aktif. Pindah dulu ke branch tujuan. - Penanda konflik ikut ter-commit. Cari
<<<<<<<di berkas sebelumgit add. - Rebase branch yang sudah di-push bersama, lalu force push. Rekan setim akan menemukan commit ganda dan konflik aneh.
- Menimbun branch selama berminggu-minggu. Makin lama terpisah, makin besar konfliknya. Merge atau rebase dari
mainsecara rutin.
Coba sendiri
Buat konflik dengan sengaja, lalu selesaikan:
Coba git merge --abort dulu, lalu cek bahwa git status -s bersih. Jalankan merge lagi, kemudian selesaikan konfliknya:
Rangkuman
- Branch adalah penunjuk ringan ke sebuah commit, dan HEAD menunjuk ke branch yang aktif.
git switch -cmembuat sekaligus pindah branch, dangit mergemenyatukan branch lain ke branch aktif, lewat fast-forward atau merge commit.- Rebase membuat riwayat lurus dengan menulis ulang commit, jadi pakai hanya di branch lokal, jangan di branch publik.
- Conflict diselesaikan dengan mengedit berkas, menghapus penanda,
git add, lalugit commit, atau dibatalkan dengangit merge --abort.
Slide 17 sampai 21 dari deck Git. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Kuis (4 soal)
Cek pemahaman
1Secara teknis, branch di Git adalah...
2Setelah perintah berikut, branch mana yang aktif?
git switch -c fitur/a git switch -c fitur/b git branch3Rebase aman dipakai pada branch publik yang sudah di-push dan dipakai banyak orang.
4main tidak bertambah commit sejak branch fitur dibuat. Apa yang dilakukan git merge?
git switch -c fitur echo b >> a.txt git commit -am "Ubah a" git switch main git merge fitur