TL;DR: jalankan git fetch upstream && git merge upstream/main && git push origin main dan fork Anda tertib. Itulah seluruh alur “git sync fork with upstream” dalam satu baris — tarik perubahan dari proyek yang Anda fork, lalu dorong ke salinan Anda. Jika Anda menyukai riwayat linear, ganti merge dengan git rebase upstream/main lalu force-push. Dan jika remote upstream belum pernah Anda pasang sama sekali, mulai dari langkah 1 di bawah — remote yang hilang itulah penyebab nomor satu fork yang “tak mau sinkron”. Sisanya — rebase, tombol sync GitHub, branch menyimpang yang tak bisa didorong — hanya detail di atas tiga perintah itu.
Apa artinya menyinkronkan fork dengan upstream?
Fork adalah salinan Anda atas repositori orang lain di GitHub. Yang asli disebut upstream; salinan Anda disebut origin. Fork GitHub tidak memperbarui dirinya sendiri — ketika maintainer menggabungkan pull request, salinan Anda tetap menyimpan kode kemarin. Menyinkronkan fork berarti menarik commit baru dari upstream ke fork Anda agar branch Anda sama dengan, atau setidaknya memuat, keadaan terkini proyek.
Ini penting untuk dua alasan. Pertama, kontribusi: setiap pull request yang Anda buka dari fork usang membawa derau tambahan, dan maintainer akan meminta Anda memperbarui sebelum menggabungkan. Kedua, self-hosting atau sekadar belajar: jika Anda menjalankan fork di produksi atau hanya membaca kodenya, fork berumur sebulan berarti sebulan perbaikan bug yang tidak Anda miliki.
Bagaimana menyinkronkan fork dengan upstream dari baris perintah?
Tiga langkah: deklarasikan upstream sekali, ambil dari sana, lalu merge dan push. Pengkabelannya permanen — langkah 2 dan 3 satu-satunya yang Anda ketik berikutnya.
Langkah 1 — tambahkan remote upstream (sekali per clone).
# di dalam clone lokal Anda atas fork tersebut
git remote add upstream https://github.com/ORIGINAL_OWNER/REPO.git
git remote -v # pastikan: origin -> fork Anda, upstream -> yang asli URL yang benar ada di halaman repo asli: tombol hijau Code. Kesalahan umum adalah mengarahkan kedua remote ke fork Anda sendiri — “sinkronisasi” kemudian diam-diam tidak melakukan apa-apa, karena Anda menarik dari salinan yang sama usangnya dengan milik Anda.
Langkah 2 — fetch dan merge branch upstream.
git checkout main
git fetch upstream
git merge upstream/main
git push origin main Itulah jawaban standar untuk “git sync fork with upstream command line”. Fast-forward adalah hasil yang normal — main di fork Anda tak punya apa-apa yang baru, jadi ia sekadar bergeser maju ke upstream/main tanpa commit merge yang dibuat.
Langkah 3 — ulangi sesuai kebutuhan. Tidak ada yang perlu diingat selain git fetch upstream && git merge upstream/main && git push origin main. Untuk melihat seberapa jauh Anda tertinggal sebelum merge, jalankan git rev-list --count main..upstream/main setelah fetch.
Rebase atau merge saat menyinkronkan fork?
Keduanya mendaratkan kode yang sama di fork Anda; bedanya pada riwayat yang ditinggalkan. Pilih satu kebijakan per repo dan konsisten:
| Metode | Perintah | Hasil riwayat | Paling cocok untuk |
|---|---|---|---|
| Merge | git merge upstream/main | Commit merge ekstra pada branch yang menyimpang | Feature branch dengan PR terbuka — tidak pernah menulis ulang apa pun |
| Rebase | git rebase upstream/main | Commit Anda diputar ulang di atasnya, riwayat linear | Menjaga main fork tetap bersih; fork menyimpang yang ingin direset |
| UI GitHub | Tombol Sync branch / merge PR | Sama dengan merge | Menyusul cepat tanpa membuka clone |
Varian rebase dari sinkronisasi ini:
git fetch upstream
git rebase upstream/main
git push --force-with-lease origin main Force push wajib karena rebase menulis ulang ID commit — branch remote fork Anda tak lagi diturunkan dari yang lokal. Selalu utamakan --force-with-lease daripada --force: ia menolak menimpa remote jika ada orang lain (atau mesin Anda yang satu lagi) mendorong di sela, sehingga perintah berbahaya itu aman secara bawaan.
Satu aturan yang layak ditato di pergelangan tangan: jangan pernah rebase branch yang punya pull request terbuka kecuali Anda tahu apa yang Anda lakukan — rebase mengubah ID commit, dan PR terbuka bisa lepas dari commitnya. Sinkronkan main dengan merge (atau rebase sebelum memulai pekerjaan baru), dan jauhkan branch PR dari urusan ini.
Kenapa fork saya tidak mau sinkron dengan upstream?
Empat tersangka biasa, dalam urutan kemunculannya di terminal nyata:
- Tidak ada remote
upstream—git remote -vhanya menampilkanorigin. Gejala:git fetch upstreamgagal dengan'upstream' does not appear to be a git repository. Perbaikan: langkah 1 di atas. - Anda fetch tapi tak pernah merge — fetch memperbarui
upstream/maindi repo lokal Anda tapi tak menyentuh branch kerja mana pun. Gejala:git logtampak lama setelah fetch berhasil. Perbaikan:git merge upstream/main. - Riwayat menyimpang — Anda commit ke
mainfork, dan upstream juga bergerak.git pullkemudian mengeluh soal unrelated histories atau memaksa merge. Perbaikan, jika Anda ingin upstream menang:git reset --hard upstream/main(membuang commit lokal Anda yang hanya ada di main — cekgit stash listatau cadangkan lewat branch dulu; jika reset buruk sudah terlanjur, jalur pemulihannya sama seperti di git undo last commit:git reflogmasih mengingat ujung lama). - Push ditolak sebagai non-fast-forward setelah rebase — Anda rebase tapi push secara normal. Perbaikan:
git push --force-with-lease origin main.
Kasus kelima yang jarang: repo upstream diubah namanya atau dihapus, sehingga bahkan URL di langkah 1 404. GitHub mengalihkan repo yang diganti nama, jadi kegagalan keras biasanya berarti dihapus atau dibuat privat — tak ada apa-apa untuk disinkronkan.
Bisakah fork disinkronkan dari situs web GitHub?
Bisa. Di halaman fork Anda, dropdown branch menampilkan tombol Sync fork setiap kali branch tertinggal; satu klik menarik upstream masuk. Di bawahnya, cara yang sama bekerja sebagai pull request: buka PR dari upstream/main ke main fork Anda dan gabungkan.
Batas tombolnya menjelaskan kapan harus kembali ke CLI: ia hanya melakukan fast-forward atau merge — tidak rebase, dan menolak mentah-mentah saat branch menyimpang, dengan saran membuang commit atau memakai baris perintah. Ia juga hanya menyinkronkan branch bawaan. Untuk segala hal di luar penyusulan sederhana, tiga perintah di atas adalah alatnya.
Seberapa sering Anda perlu menyinkronkan fork?
Sebelum setiap pekerjaan baru adalah jawaban yang jujur: cabang dari main yang segar, dan tidak ada PR yang Anda buka diawali dengan “ini berbasis versi tiga pekan lalu”. Untuk fork yang aktif Anda kontribusikan, sinkronisasi main harian atau per sesi hanya butuh detik. Untuk fork yang hanya Anda baca atau deploy, sinkronkan saat upstream mengirim sesuatu yang Anda mau — berlangganan feed rilis repo aslinya dan sinkron saat rilis. Menyinkronkan itu murah justru karena rutin; fork yang tertinggal enam bulan sering butuh operasi daripada merge — di situlah “sinkronkan fork saya” berubah menjadi satu sore penuh.
Cheat sheet
# pengaturan sekali saja
git remote add upstream https://github.com/ORIGINAL_OWNER/REPO.git
# sinkron rutin (kebijakan merge)
git fetch upstream && git merge upstream/main && git push origin main
# sinkron rutin (kebijakan rebase, riwayat linear)
git fetch upstream && git rebase upstream/main && git push --force-with-lease origin main
# seberapa jauh saya tertinggal?
git fetch upstream && git rev-list --count main..upstream/main
# menyimpang tak tertolong — jadikan main identik dengan upstream (destruktif)
git fetch upstream && git reset --hard upstream/main && git push --force-with-lease origin main Simpan dua-perintah rutin itu di ingatan otot Anda dan fork menyimpang tetap jadi keingintahuan yang Anda baca, bukan masalah yang Anda perbaiki. Jika urusan rumah tangga git Anda meluas ke server, journalctl cheat sheet mencakup separuh lainnya dari menjaga riwayat mesin tetap terbaca.
— mrsaynothing
Get the next one by email
One email per post. No spam, no algorithms.
what is this?ss vs netstat: Perintah Port Linux Mana yang Dipakai
Suka tulisannya? Saya membangun seperti ini untuk hidup. pekerjakan saya