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:
git remote add upstream https://github.com/ORIGINAL-OWNER/repo.git
git remote -vContoh output:
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:
git fetch upstreamSekarang kamu punya upstream/main sebagai snapshot terbaru repo asli. Untuk memperbarui branch main lokalmu:
git checkout main
git merge upstream/mainAtau kalau kamu suka riwayat linear:
git checkout main
git rebase upstream/mainLalu dorong ke fork-mu agar GitHub ikut segar:
git push origin mainPola 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.