
Kasusnya muncul ketika menjalankan perintah yang sangat umum:
git pull
petunjuk: Anda punya cabang-cabang yang berlainan dan perlu menyebutkan cara
petunjuk: merujukkannya.
petunjuk: Anda dapat melakukannya dengan menjalankan salah satu perintah berikut
petunjuk: suatu saat sebelum penarikan berikutnya:
petunjuk: git config pull.rebase false # penggabungan
petunjuk: git config pull.rebase true # pendasaran ulang
petunjuk: git config pull.ff only # hanya maju cepat
fatal: Perlu sebutkan cara merujukkan cabang yang berlainan.Pesan itu biasanya muncul di Git versi baru ketika branch lokal dan branch remote sudah diverged. Artinya, branch lokal punya commit sendiri, sementara branch remote juga punya commit baru yang belum ada di lokal. Mereka bukan sekadar beda posisi, tapi sudah bercabang dari titik riwayat yang sama.
Apa yang Sebenarnya Terjadi Saat Git Pull?
Banyak orang menganggap `git pull` sebagai “ambil update terbaru”. Itu tidak salah, tapi belum lengkap. Secara praktis, `git pull` adalah gabungan dari dua tahap:
- `git fetch` untuk mengambil commit terbaru dari remote.
- Integrasi ke branch lokal, bisa dengan `merge`, `rebase`, atau `fast-forward`.
Kalau branch lokal belum punya commit baru, prosesnya gampang. Git cukup memajukan pointer branch lokal mengikuti remote. Ini disebut fast-forward. Tapi kalau lokal dan remote sama-sama punya commit baru, Git butuh strategi. Di situlah muncul pesan “cabang-cabang yang berlainan”.
Git bukan sedang menolak bekerja. Ia hanya menolak menebak keputusan penting atas nama kita. Kadang Git memang lebih sopan daripada sebagian aplikasi yang langsung update lalu merusak suasana.
Contoh Situasi Branch Diverged
Bayangkan branch lokal `main` punya commit `A` dan `B`. Sementara itu, remote `origin/main` sudah punya commit `C` dari perangkat lain, GitHub Actions, atau hasil push sebelumnya dari komputer berbeda.
main lokal:
* B
* A
| * C origin/main
|/
* titik-awal-bersamaDalam kondisi seperti ini, Git perlu tahu apakah commit lokal mau digabung dengan merge commit, dipindahkan ke atas commit remote melalui rebase, atau hanya boleh pull kalau bisa fast-forward. Tiga pilihan ini sama-sama valid, tetapi dampaknya berbeda terhadap riwayat commit.
Tiga Pilihan yang Ditawarkan Git
Merge
Menggabungkan dua jalur commit dan biasanya membuat commit gabungan baru. Riwayat apa adanya, tapi grafik commit bisa bercabang.
Rebase
Memindahkan commit lokal ke atas commit remote terbaru. Riwayat terlihat lebih lurus dan rapi, cocok untuk kerja personal atau repo kecil.
Fast-forward only
Hanya mau pull kalau branch lokal bisa dimajukan tanpa konflik riwayat. Paling ketat, tapi sangat aman untuk menjaga linearitas.
Pilihan Pertama: Merge
Merge cocok kalau kamu ingin mempertahankan bentuk riwayat apa adanya. Setiap percabangan terlihat jelas, termasuk kapan branch lokal dan remote bertemu kembali. Ini umum dipakai dalam kerja tim yang ingin menyimpan konteks integrasi.
git pull --no-rebaseKalau ingin menjadikannya default hanya untuk repository saat ini:
git config pull.rebase falseKalau ingin berlaku untuk semua repository di komputer:
git config --global pull.rebase falsePilihan Kedua: Rebase
Rebase cocok kalau kamu ingin riwayat yang lebih linear. Commit lokal akan “diangkat” lalu ditempatkan ulang di atas commit terbaru dari remote. Hasil akhirnya tampak seperti kamu bekerja setelah update remote terakhir.
git pull --rebaseUntuk menjadikannya default di repository saat ini:
git config pull.rebase trueUntuk menjadikannya default global:
git config --global pull.rebase trueDalam workflow personal, blog statis, repo konten, atau proyek yang lebih sering dikerjakan sendiri, rebase biasanya lebih enak. Riwayat commit lurus, tidak banyak merge commit otomatis, dan log lebih mudah dibaca saat audit.
Pilihan Ketiga: Fast-forward Only
Fast-forward only adalah pilihan paling ketat. Git hanya akan melakukan pull jika branch lokal belum punya commit yang berbeda dari remote. Kalau branch sudah diverged, perintah ini gagal dan memaksa kamu menyelesaikan situasinya secara manual.
git pull --ff-onlyUntuk default repository saat ini:
git config pull.ff onlyUntuk default global:
git config --global pull.ff onlyPilihan ini bagus untuk menjaga branch penting tetap sangat disiplin. Tapi untuk kerja harian yang sering membuat commit lokal sebelum pull, mode ini bisa terasa terlalu galak. Git jadi seperti satpam kompleks: aman, tapi banyak tanya.
Ringkasan Perbedaan Merge, Rebase, dan FF Only
| Strategi | Perintah Sekali Pakai | Efek ke Riwayat | Cocok Untuk |
|---|---|---|---|
| Merge | `git pull --no-rebase` | Membuat merge commit jika branch bercabang. | Tim yang ingin riwayat percabangan tetap terlihat. |
| Rebase | `git pull --rebase` | Commit lokal dipindah ke atas commit remote. | Workflow personal, blog statis, repo konten, dan riwayat linear. |
| Fast-forward only | `git pull --ff-only` | Tidak membuat merge atau rebase otomatis. | Branch yang harus sangat ketat dan tidak boleh bercabang otomatis. |
Langkah Aman Saat Pesan Ini Muncul
Sebelum memilih strategi, pastikan working tree bersih. Ini penting karena rebase atau merge bisa terganggu kalau masih ada perubahan file yang belum di-commit.
git statusKalau status bersih dan kamu ingin riwayat yang rapi, jalankan:
git pull --rebaseJika muncul konflik, Git akan berhenti dan memberi tahu file mana yang perlu diperbaiki. Setelah file konflik dibereskan, lanjutkan dengan:
git add nama-file-yang-sudah-beres
git rebase --continueKalau ingin membatalkan proses rebase yang sedang berjalan:
git rebase --abortKonfigurasi Agar Tidak Ditanya Lagi
Kalau kamu sudah punya preferensi tetap, Git bisa diberi konfigurasi default. Untuk workflow yang ingin riwayat rapi, konfigurasi berikut biasanya paling nyaman:
git config --global pull.rebase trueTambahkan juga `rebase.autoStash` agar perubahan lokal yang belum di-commit bisa disimpan sementara saat rebase, lalu dikembalikan setelah proses selesai.
git config --global rebase.autoStash trueSetelah itu, cek apakah konfigurasi sudah masuk:
git config --global --get pull.rebase
git config --global --get rebase.autoStash
true
trueDengan konfigurasi itu, perintah `git pull` berikutnya akan memakai rebase secara default. Jadi Git tidak lagi menampilkan pidato panjang tentang cabang berlainan setiap kali pull.
Kapan Tidak Memakai Rebase?
Walau rebase sering nyaman, bukan berarti harus dipakai untuk semua situasi. Hindari rebase sembarangan pada commit yang sudah dipakai banyak orang, terutama di branch bersama yang aktif. Rebase mengubah urutan dan identitas commit, sehingga bisa membingungkan kolaborator kalau dipakai tanpa koordinasi.
Untuk branch pribadi sebelum push, rebase relatif aman. Untuk branch bersama yang sudah dipakai tim, merge sering lebih konservatif. Untuk branch produksi yang harus super ketat, fast-forward only bisa jadi pilihan.
Checklist Cepat untuk Kasus Ini
- Jalankan `git status` untuk memastikan working tree bersih.
- Gunakan `git pull --rebase` jika ingin riwayat commit linear.
- Gunakan `git pull --no-rebase` jika ingin merge commit dan histori cabang tetap terlihat.
- Gunakan `git pull --ff-only` jika hanya mengizinkan update fast-forward.
- Set `git config --global pull.rebase true` jika ingin rebase menjadi default.
- Tambahkan `git config --global rebase.autoStash true` agar kerja harian lebih lentur.
Perintah Rekomendasi untuk Workflow Personal
Untuk kasus kerja lokal di Debian, repo blog, atau proyek pribadi yang ingin riwayatnya bersih, paket perintah berikut sudah cukup masuk akal:
git status
git config --global pull.rebase true
git config --global rebase.autoStash true
git pull --rebaseSetelah itu, pull berikutnya cukup:
git pullKalau ingin membaca detail teknisnya langsung dari sumber utama, dokumentasi resmi Git menyediakan halaman untuk git pull, git config, dan git rebase. Dokumentasi itu memang tidak selalu sesantai obrolan warung kopi, tapi cukup jelas untuk memastikan perilaku perintahnya.
Penutup
Pesan “cabang-cabang yang berlainan” bukan tanda repository rusak. Itu tanda Git sedang meminta keputusan eksplisit karena branch lokal dan remote sudah punya jalur commit masing-masing. Pilihannya ada tiga: merge untuk menjaga histori cabang, rebase untuk riwayat linear, dan fast-forward only untuk disiplin paling ketat.
Untuk workflow personal yang ingin rapi, pilihan paling praktis adalah `git pull --rebase`, lalu jadikan default dengan `git config --global pull.rebase true`. Setelah itu Git tidak perlu bertanya lagi, dan terminal bisa kembali menjadi tempat kerja, bukan tempat sidang hubungan antar-branch.