Github: Akış yukarı kolu çatal içine içe aktar


169

Çatalım (varsa originbir proje (itibaren) upstreamüzerinde github). Şimdi yukarı akış projesi yeni bir şube ekledi, çatalıma almak istiyorum. Bunu nasıl yaparım?

Uzaktan kontrol etmeye ve bunun üzerine bir şube oluşturmaya çalıştım, ancak bu dalı git pushşuraya itmeye çalıştığı şekilde yapılandırır upstream:

git checkout upstream/branch
git checkout -b branch

Düzenle

Belki bu açık değildi, ama şubeyi yerel veri havuzuma eklemek istiyorum, böylece originaracılığıyla (çatalım) itebilirim git push. Çünkü yukarı yönlü depolar genellikle salt okunurdur ve katkıda bulunmak için çatallarsınız.

Bu yüzden temelde origin, içeriğinin alınacağı varolmayan bir dalı kontrol etmek istiyorum upstream.

Yanıtlar:


262
  1. Yeni yukarı akış şubesini yerel repoya çektiğinizden emin olun :

    • İlk olarak, çalışma ağacınızın temiz olduğundan emin olun (değişiklikleri yapın / saklayın / geri alın)
    • Ardından, git fetch upstreamyeni yukarı akış dalını almak için
  2. Yeni yukarı akış dalının ( newbranch) yerel bir sürümünü oluşturun ve bu sürüme geçin :

    • git checkout -b newbranch upstream/newbranch
  3. Ne zaman yeni şube zorlamaya hazırız kökenli :

    • git push -u origin newbranch

-U Belirtilen uzak izleme kadar anahtar takımları (bu örnekte, origin)


6
İnanıyorum git fetch upstreamberi, ilk adımda daha iyi bir seçenektir git pull upstreamişlem daha sonra yapılması gereken gerektirir git remote add ...için upstream.
Alexander Pavlov

git pull upstream döndürür: 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.Komutun sonuna dal adı eklenmesi, yeni bir yerel dal oluşturulmasına izin vermek yerine, yukarı akıştaki dal arasında geçerli yerel dalla birleşmeye neden olur. Herhangi bir fikir?
mMontu

1
Değiştirme git pull upstreamile git fetch upstreamsorun çözülecek ve aşağıdaki adımlar çalıştı.
mMontu

Anlıyorum: ölümcül: Yollar güncellenemiyor ve aynı zamanda 'akış yukarı' dalına geçilemiyor. Taahhüt olarak çözülemeyen 'akış yukarı / master'ı kontrol etmeyi düşündünüz mü?
sureshvv

1
@sureshvv Muhtemelen bunlardan herhangi birini yapmadan önce yukarı akış adı verilen yukarı akış havuzuna uzaktan başvurmanız gerekir . Bunu yapmazsanız, bir tanesini şu şekilde eklersiniz: git remote add upream your_git_upstream_repository_url.git . Bu konuda açıklığa ihtiyacınız varsa bunu okuyun .
Gabriel Rainha

7

Kullanmak istiyorum

git checkout -b <new_branch> upstream/<new_branch>

Aslında bu soruda açıkladığımdan daha önce denedim; aynı sonuçlara yol açar.
dürtmek

4

Bununla da sorun yaşadım ve google beni buraya götürdü. Ancak çözümler işe yaramadı. Benim sorunum benim yukarı akış eklediğimde, benim git config tüm dalları yerine, sadece getirmeye ayarlamak için oldu. örneğin şöyle görünüyordu

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

.Git / config dosyasını aşağıdaki gibi düzenlemek sorunumu çözdü

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

Aşağıdaki adımlar benim için iyi çalıştı (yukarı akış şube adının olduğu varsayılarak branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
Git get upstream uptal ölümcül alıyorum: 'upstream' git deposu ölümcül görünmüyor: Uzak depodan okunamadı. Lütfen doğru erişim haklarına sahip olduğunuzdan ve havuzun var olduğundan emin olun.
ThinkDigital

0

--track?

git branch --track branch upstream/branch

Belki seni yanlış anladım, ama bunu yapmak dalı aynı şekilde kurar; ile pushkarşı Pusing upstream.
dürtmek

Hayır, sanırım seni yanlış anladım.
troelskn

0

Çatalımda zaten upstreamtanımlanmış olan (kanonik repodan) biraz daha karmaşık bir senaryom vardı, ancak bir dalı farklı bir çataldan kontrol etmek gerekiyordu. Bunu yapmak için süreç biraz farklıdır. İşte ben sona erdi yapılandırma:

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

Şimdi bir şubeyi <other_user>çataldan da kontrol edebilirsiniz .

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

Bu size çataldan elde edilen yerel bir dal verecektir.

Bu yerel şubeyi itmek için push komutumla spesifik olmalıydım.

git push origin <branch>

Bu, kabul edilen cevapla hemen hemen aynıdır, sadece getirdiğiniz uzaktan kumandanın “yukarı akış” olarak adlandırılmaması.
poke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.