Github: Impor cabang hulu ke dalam garpu

169

Saya punya fork ( origin) dari project ( upstream) di github. Sekarang proyek hulu telah menambahkan cabang baru, saya ingin mengimpor ke garpu saya. Bagaimana aku melakukan itu?

Saya mencoba memeriksa remote dan membuat cabang di atasnya, tetapi mengkonfigurasi cabang dengan cara yang git pushmencoba untuk mendorong ke upstream:

git checkout upstream/branch
git checkout -b branch

sunting

Mungkin itu tidak jelas, tapi saya ingin menambahkan cabang ke repositori lokal saya, jadi saya bisa mendorongnya ke origin(garpu saya) via git push. Karena repositori hulu biasanya hanya-baca dan Anda membayarnya untuk berkontribusi.

Jadi pada dasarnya saya ingin checkout cabang yang tidak ada originyang isinya akan ditarik upstream.

menyodok
sumber

Jawaban:

262
  1. Pastikan Anda telah menarik cabang hulu baru ke repo lokal Anda :

    • Pertama, pastikan pohon kerja Anda bersih (komit / simpanan / kembalikan perubahan apa pun)
    • Kemudian, git fetch upstreamuntuk mengambil cabang hulu yang baru
  2. Buat dan alihkan ke versi lokal cabang hulu baru ( newbranch):

    • git checkout -b newbranch upstream/newbranch
  3. Saat Anda siap untuk mendorong cabang baru ke asal :

    • git push -u origin newbranch

The u beralih set up pelacakan ke ditentukan jarak jauh (dalam contoh ini, origin)

urschrei
sumber
6
Saya percaya git fetch upstreamadalah pilihan yang lebih baik pada langkah pertama, karena git pull upstreammembutuhkan lebih banyak tindakan yang harus dilakukan setelah git remote add ...untuk upstream.
Alexander Pavlov
git pull upstream returns: You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.Menambahkan nama cabang di akhir perintah menyebabkan penggabungan antara cabang di hulu dengan cabang lokal saat ini alih-alih memungkinkan pembuatan cabang lokal baru. Ada ide?
mMontu
1
Mengganti git pull upstreamdengan git fetch upstreammemecahkan masalah, dan langkah-langkah berikut berhasil.
mMontu
Saya mendapatkan: fatal: Tidak dapat memperbarui jalur dan beralih ke cabang 'hulu' pada saat yang sama. Apakah Anda bermaksud checkout 'upstream / master' yang tidak dapat diselesaikan sebagai komit?
sureshvv
1
@sureshvv Itu mungkin karena Anda perlu memiliki referensi jarak jauh ke repositori hulu bernama upstream sebelum melakukan semua itu. Jika Anda tidak melakukannya, itulah cara Anda menambahkannya: git remote add upstream your_git_upstream_repository_url.git . Baca ini jika Anda perlu klarifikasi tentang hal itu.
Gabriel Rainha
7

Saya akan menggunakan

git checkout -b <new_branch> upstream/<new_branch>
Svenito
sumber
Itu sebenarnya yang saya coba bahkan sebelum apa yang saya jelaskan dalam pertanyaan; itu mengarah ke hasil yang sama.
colok
4

Saya juga mengalami masalah dengan ini, dan google membawa saya ke sini. Namun solusinya tidak berhasil. Masalah saya adalah ketika saya menambahkan upstream saya, itu mengatur konfigurasi git saya untuk hanya mengambil master, daripada semua cabang. misal terlihat seperti ini

[remote "somebody"]
        url = [email protected]:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

Mengedit .git / config sebagai berikut memperbaiki masalah saya

[remote "somebody"]
        url = [email protected]:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*
Ian Will
sumber
1

Langkah-langkah berikut ini berhasil bagi saya (dengan asumsi nama cabang hulu adalah branch):

$ git fetch upstream
$ git checkout branch
$ git push origin
Eneko Alonso
sumber
1
Saya mendapatkan git mengambil upstream fatal: 'upstream' tampaknya bukan repositori git yang fatal: Tidak dapat membaca dari repositori jarak jauh. Pastikan Anda memiliki hak akses yang benar dan repositori ada.
ThinkDigital
0

--track?

git branch --track branch upstream/branch
troelskn
sumber
Mungkin saya mengerti Anda salah, tetapi melakukan itu akan membuat cabang dengan cara yang sama; dengan pushmendorong ke upstream.
colok
Tidak, saya pikir saya salah paham dengan Anda.
troelskn
0

Saya memiliki skenario yang sedikit lebih rumit di mana saya sudah memiliki upstreamdefinisi dalam fork saya (dari repo kanonik) tetapi perlu checkout cabang dari fork yang berbeda. Untuk menyelesaikannya, prosesnya sedikit berbeda. Inilah konfigurasi yang akhirnya saya buat:

[remote "origin"]
url = [email protected]:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = [email protected]:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = [email protected]:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

Sekarang Anda dapat checkout cabang dari <other_user>garpu juga.

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

Itu akan memberi Anda cabang lokal yang berasal dari garpu.

Untuk mendorong cabang lokal itu saya harus spesifik dengan perintah push saya.

git push origin <branch>
okor
sumber
Itu hampir sama dengan jawaban yang diterima, hanya saja remote yang Anda ambil tidak disebut "upstream".
colok