Rebase & Cherry-pick
Merapikan riwayat menjadi satu garis dengan rebase, dan mengambil commit tertentu dengan cherry-pick.
Rebase: memindahkan dasar branch
Misalkan main maju sementara kamu mengerjakan fitur-footer:
c3 <- c4 (fitur-footer)
/
c1 <- c2 <- c5 (main)
Merge akan membuat commit penggabungan. Rebase melakukan hal lain: ia "mencabut" commit c3 dan c4, lalu memutar ulang keduanya di atas c5. Hasilnya riwayat lurus:
c1 <- c2 <- c5 <- c3' <- c4' (fitur-footer)
(main)
c3' dan c4' adalah commit baru (hash berbeda) dengan perubahan yang sama. Perintahnya dijalankan dari branch yang ingin dipindahkan:
git switch fitur-footer
git rebase main
git switch main
git merge fitur-footer # sekarang fast-forward, riwayat linear
Merge vs rebase
| Merge | Rebase | |
|---|---|---|
| Riwayat | Mempertahankan apa adanya (bercabang) | Linear, rapi |
| Hash commit | Tidak berubah | Commit ditulis ulang (hash baru) |
| Risiko | Aman | Berbahaya bila dilakukan pada commit yang sudah dibagikan |
Golden rule of rebase
Jangan pernah rebase commit yang sudah di-push dan dipakai orang lain. Rebase mengubah hash; rekanmu yang memegang commit lama akan mengalami riwayat yang tidak cocok. Aman untuk: branch pribadi yang belum dibagikan, atau membersihkan sebelum membuka PR.
Konflik saat rebase
Commit diputar ulang satu per satu, jadi konflik bisa muncul di tiap commit. Selesaikan seperti biasa lalu:
git add berkas-yang-konflik
git rebase --continue
# atau batalkan semuanya:
git rebase --abort
git pull --rebase
Alih-alih membuat commit merge setiap kali menarik perubahan, git pull --rebase menaruh commit lokalmu di atas commit remote terbaru. Banyak tim memakainya sebagai default: git config --global pull.rebase true.
Cherry-pick: ambil satu commit saja
Kadang kamu hanya butuh satu commit dari branch lain (mis. perbaikan bug), bukan seluruh branch:
git switch main
git cherry-pick eksperimen~1 # salin commit itu ke main (hash baru)
git cherry-pick a1b2c3d e4f5g6h # beberapa commit
Cherry-pick membuat salinan commit di branch saat ini. Bila konflik: selesaikan, git add, lalu git cherry-pick --continue (atau --abort). Pakai seperlunya: terlalu sering menyalin commit membuat riwayat membingungkan.
Rebase interaktif (info)
git rebase -i HEAD~4 membuka daftar commit yang bisa kamu reword, squash, drop, reorder. Ini alat ampuh untuk merapikan sebelum PR. (Tersedia di Git asli; simulator ini mendukung rebase biasa.)