Bagaimana saya bisa Sinkronisasi ulang garpu dari aslinya

33

Saya baru saja melakukan proyek di Github. Saya membuat modifikasi dan mengirim permintaan tarik. Pemiliknya menggabungkan garpu saya dengan proyek utama dan setelah itu ia membuat beberapa modifikasi. Jadi untuk sekarang garpu saya tidak diperbarui dengan proyek utama. Saya kehilangan modifikasi yang dibuatnya setelah menggabungkan permintaan tarik saya. Bagaimana saya bisa memperbarui garpu saya dengan proyek Utama? Apakah ada cara untuk melakukan itu di antarmuka web?

Terima kasih

melarang
sumber
Saya menulis instruksi sederhana. lihat di sini: webapps.stackexchange.com/a/58140/63016
Youngjae
2
Sekarang ada dokumen resmi yang dilakukan dengan baik: help.github.com/articles/syncing-a-fork
Andre Miras

Jawaban:

36

Secara desain, forking suatu proyek menciptakan repo terpisah yang tidak diperbarui ketika repo asli berubah. Namun, gitmembuatnya cukup mudah untuk memperbarui secara manual.

Anda memerlukan bantuan repositori ke-3 (salinan lokal Anda sudah mencukupi). Ada 3 repo:

  • "Hulu": repositori proyek hulu di Github.
  • "Asal": repositori garpu Anda di Github
  • "Lokal": Gudang lokal Anda di komputer Anda. Saya akan menganggap Anda membuatnya dengan mengkloning Fork menggunakan git clone [email protected]:your-username/projectname.git, dan bahwa semua orang menggunakan cabang master.

Dengan asumsi "Asal" dan "Lokal" saat ini berada dalam keadaan yang sama, dan "Hulu" berada di depan dengan 1 atau lebih komit (gabungan dan perubahan berikutnya).

Pertama-tama tambahkan proyek upstream sebagai remote Git :

git remote add upstream https://github.com/upstream-username/projectname.git

Kemudian tarik (artinya ambil lalu gabungkan secara otomatis) perubahan dari mastercabang jarak jauh ke cabang repositori lokal Anda saat ini ( master):

git pull upstream master

Sekarang repositori lokal Anda sinkron dengan upstream. Akhirnya, dorong repo lokal Anda ke garpu Github Anda:

git push origin master

Sekarang semuanya sinkron.

Siput mekanik
sumber
2
Terima kasih banyak .. ini memalukan bahwa hal ini tidak mungkin dilakukan di antarmuka web ..
bAN
1
Ini memang mungkin pada antarmuka web: webapps.stackexchange.com/a/31010/10390
thSoft
Ya ampun! Saya telah merobek rambut saya mencoba mencari info eksplisit ini. Terima kasih telah berbagi!
pepoluan
... tapi tolong lihat juga komentar jawabannya, membuktikan bahwa Resync via web bukanlah pilihan terbaik karena mencemari repositori
usr-local-ΕΨΗΕΛΩΝ
apa yang Anda lakukan ketika dikatakan "sudah terbaru" setelah tarikan, tetapi jelas tidak? (ada file yang saya ubah semua dalam satu subdirektori, dan saya seharusnya tidak memiliki perbedaan dalam file lain, tapi saya lakukan)
roberto tomás
1

Anda perlu menambahkan remote (lihat bantuan GitHub ) dan tarik dari remote baru itu.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master
VONC
sumber
0

Saya menemukan jawaban ini untuk melengkapi jawaban asli karena hanya berurusan dengan sinkronisasi satu cabang (master). Selain itu, jika cabang telah dibuat di hulu sejak garpu Anda, itu sedikit lebih terlibat untuk membuatnya di garpu Anda.

Jawaban singkatnya adalah, untuk memperbarui garpu Anda dengan setiap cabang di repositori hulu, jalankan perintah ini.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Apa yang tidak dilakukan adalah menghapus cabang dari garpu Anda yang telah dihapus dari hulu. Tidak ada cara untuk mengotomatisasi itu terutama jika Anda telah membuat cabang di cabang Anda.

Brian
sumber