Ilustrasi terminal Git saat git pull meminta pilihan rebase merge atau fast forward
Saat `git pull` berhenti karena cabang berlainan, Git belum rusak. Ia hanya minta arah yang jelas.

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.

**Inti masalahnya sederhana:** `git pull` bukan cuma mengambil data dari remote. Ia juga harus menggabungkan perubahan remote ke branch lokal. Saat riwayat sudah bercabang, Git minta kamu memilih metode penggabungannya.

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:

  1. `git fetch` untuk mengambil commit terbaru dari remote.
  2. 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-bersama

Dalam 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-rebase

Kalau ingin menjadikannya default hanya untuk repository saat ini:

git config pull.rebase false

Kalau ingin berlaku untuk semua repository di komputer:

git config --global pull.rebase false
**Catatan kecil:** merge bukan pilihan buruk. Namun kalau kamu sering membuat commit kecil di lokal, riwayat bisa terasa ramai. Bukan salah, hanya kadang kurang nyaman dibaca. Seperti grup keluarga yang semua orang membalas “siap”.

Pilihan 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 --rebase

Untuk menjadikannya default di repository saat ini:

git config pull.rebase true

Untuk menjadikannya default global:

git config --global pull.rebase true

Dalam 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.

**Rekomendasi praktis:** kalau kamu ingin riwayat rapi dan biasanya bekerja sendiri di branch `main`, pakai `git pull --rebase` atau set `pull.rebase true`.

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-only

Untuk default repository saat ini:

git config pull.ff only

Untuk default global:

git config --global pull.ff only

Pilihan 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

StrategiPerintah Sekali PakaiEfek ke RiwayatCocok 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 status

Kalau status bersih dan kamu ingin riwayat yang rapi, jalankan:

git pull --rebase

Jika 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 --continue

Kalau ingin membatalkan proses rebase yang sedang berjalan:

git rebase --abort
**Hindari perintah nekat.** Jangan langsung memakai `reset --hard`, menghapus folder `.git`, atau force push sebelum paham posisi branch. Itu bukan debugging, itu undian berhadiah migrain.

Konfigurasi 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 true

Tambahkan 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 true

Setelah itu, cek apakah konfigurasi sudah masuk:

git config --global --get pull.rebase
git config --global --get rebase.autoStash
true
true

Dengan 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 --rebase

Setelah itu, pull berikutnya cukup:

git pull

Kalau 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.