gitgithubforkupstreamremoteMenengah4 mnt baca

Sinkronisasi Fork dengan Upstream

Jaga fork-mu tetap segar dari repo aslinya: tambah remote upstream, fetch, lalu merge atau rebase.

Fork yang tertinggal itu bom waktu

Saat kamu fork repo open source, GitHub membuat salinan beku pada titik waktu itu. Repo aslinya terus bergerak: bug diperbaiki, API berubah, test ditambah. Kalau kamu mengerjakan PR selama dua minggu tanpa pernah sinkronisasi, PR-mu berisiko konflik besar-besaran atau, lebih buruk, menimpa perbaikan orang lain. Menjaga fork tetap sinkron bukan pekerjaan administratif membosankan, melainkan cara memastikan pekerjaanmu dibangun di atas fondasi terbaru.

Kenapa tidak cukup mengandalkan tombol di web saja? Tombol itu ada dan berguna, tapi memahami mekanisme upstream membuatmu bisa sinkronisasi kapan pun dari terminal, termasuk saat mengerjakan branch fitur yang perlu di-rebase di atas main terbaru.

Menambahkan remote upstream

Secara default fork hasil clone hanya punya satu remote bernama origin yang menunjuk ke fork-mu sendiri. Kamu perlu remote kedua bernama upstream yang menunjuk ke repo asli:

bash
git remote add upstream https://github.com/ORIGINAL-OWNER/repo.git
git remote -v

Contoh output:

bash
origin    https://github.com/kamu/repo.git (fetch)
origin    https://github.com/kamu/repo.git (push)
upstream  https://github.com/ORIGINAL-OWNER/repo.git (fetch)
upstream  https://github.com/ORIGINAL-OWNER/repo.git (push)

Penamaan upstream adalah konvensi, bukan keharusan, tapi ikuti saja agar orang lain langsung paham. Pengaturan ini sekali seumur repo lokal; tidak perlu diulang.

Mengambil perubahan terbaru

Ambil semua perubahan dari repo asli tanpa mengubah file kerjamu:

bash
git fetch upstream

Sekarang kamu punya upstream/main sebagai snapshot terbaru repo asli. Untuk memperbarui branch main lokalmu:

bash
git checkout main
git merge upstream/main

Atau kalau kamu suka riwayat linear:

bash
git checkout main
git rebase upstream/main

Lalu dorong ke fork-mu agar GitHub ikut segar:

bash
git push origin main

Pola lengkapnya selalu sama: fetch upstream, pindahkan main lokal ke sana (merge atau rebase), push ke origin. Lakukan ini sebelum mulai mengerjakan fitur baru dan sebelum membuka PR, supaya PR-mu selalu berbasis kode terbaru.

Sinkronisasi lewat UI GitHub

Kalau malas buka terminal, GitHub menyediakan tombol "Sync fork" di halaman fork-mu saat ia tertinggal. Klik, pilih "Update branch", selesai. Ini ekuivalen dengan merge upstream/main ke main fork-mu dari sisi server. Cepat untuk kasus sederhana, tapi tidak bisa dipakai untuk me-rebase branch fitur atau menyelesaikan konflik yang rumit, untuk itu tetap butuh perintah di atas.

Kesalahan umum pemula

Salah: membuka PR dari fork yang main-nya tertinggal 50 commit, lalu PR menampilkan ratusan file berubah yang sebenarnya bukan pekerjaanmu, membingungkan reviewer. Benar: sinkronisasi dulu (fetch upstream + merge/rebase + push), baru buka PR. Diff PR-mu harusnya hanya berisi perubahanmu sendiri.

Salah: menjalankan git pull upstream main saat sedang berada di branch fitur, sehingga commit repo asli tercampur ke branch fitur dan riwayatnya berantakan. Benar: sinkronisasi selalu dilakukan di branch main lokal. Branch fitur diperbarui dari main lokal yang sudah segar, bukan langsung dari upstream.

Tantangan

Sinkronkan sebuah fork sampai bersih

Fork sebuah repo publik kecil (atau pakai fork yang sudah ada), clone, tambahkan remote upstream, lalu jalankan rangkaian fetch upstream, merge ke main lokal, dan push ke origin. Verifikasi dengan git log --oneline -5 bahwa main lokal dan origin/main identik dengan upstream.