Orijinal GitHub veri havuzundan yeni güncellemeleri çatallı GitHub veri havuzuna çekin


615

Birinin deposunu GitHub'da çatalladım ve sürümümü orijinal depoda yapılan taahhütler ve güncellemelerle güncellemek istiyorum. Bunlar benim kopyamı çatalladıktan sonra yapıldı.

Kökeninde yapılan değişiklikleri nasıl çekebilir ve bunları depomuza nasıl dahil edebilirim?


1
Olası yinelenen veya belki de ilgili: GitHub'daki çatallar arasında birleştirme .

Senkronize etmek isteyebileceğiniz ek etiketler varsa git push --force origin --tags, önerilen çözümlerden sonra yapın!
MediaVince

Yanıtlar:


716

Orijinal depoyu (çatalladığınız) uzaktan kumanda olarak eklemeniz gerekir.

Gönderen GitHub çatal adam sayfası :

çatal

Klon tamamlandığında origindeponuzda GitHub'daki çatalınıza işaret eden “ ” adında bir uzaktan kumanda bulunur.
Adın sizi karıştırmasına izin vermeyin, bu çatallandığınız orijinal repoya işaret etmez. Bu repoyu takip etmenize yardımcı olmak için “yukarı akış” adlı başka bir kumanda ekleyeceğiz:

$ cd github-services
$ git remote add upstream git://github.com/pjhyett/github-services.git
$ git fetch upstream

# then: (like "git pull" which is fetch + merge)
$ git merge upstream/master master

# or, better, replay your local work on top of the fetched branch
# like a "git pull --rebase"
$ git rebase upstream/master

Ayrıca bu GitHub işlemlerini kolaylaştırabilecek bir yakut taşınız da var .

çatallı

Ayrıca bkz. " Git çatalı git klonudur? ".



2
@syedrakib A'yı tercih ederim git rebase upstream/master, ancak cevaba iki olasılık ekledim.
VonC

1
Eğer bir repo çatallı varsa @PaBLoX, üzerinde çalıştığınız sizin de, repo sizin rebase ve bir itme zorlamak: dalı dahil hiçbir karışıklık. Devam eden bir çekme isteği bile doğru şekilde güncellenir.
VonC

2
@PaBLoX karışıklık yaratmazsınız: Siz git push --force, GitHub'daki şubenizin geçmişini, yeniden bastığınız yerel şubenizle değiştirirsiniz. Sadece üzücü dal kullandığınız için karışıklık söz konusu değildir.
VonC

2
Anlıyorum. Hala zor, önemsiz ve sezgisel olmadığını düşünüyorum. Yine de, değişikliklerimin her zaman en üstte (son) olacağı tuhaf, aslında daha önce yapıldı. Daha önce gönderdiğim çözüm daha iyi görünüyor (yine de önemsiz değil). Sorun şu ki, karma hash değişiklikleri (açıkçası, yeni bir ebeveyn olduğu için) ve sorunlar çağrıldığında github içinde çok fazla gürültü üretiyor. Yine de, yukarı yönlü güncelleme yapmanın ve tarihle ilgili anlamsız birleştirme taahhütleri veya "yalan" yaratmadan kendi çatalınızı yönetmenin bir yolu olmadığı beni şaşırtıyor.
Pablo Olmos de Aguilera C.

99

VonC'nin cevabına ek olarak, beğeninize daha da ince ayar yapabilirsiniz.

Uzak daldan getirildikten sonra, taahhütleri birleştirmeniz gerekir. Değiştirirdim

$ git fetch upstream

ile

$ git pull upstream master

git pull esas olarak git fetch + git merge.


Akış yukarı şubenin varolan dosyalarda herhangi bir değişiklik olmadığını, ancak yalnızca birkaç kaynak dosyasının eklendiğini bilirsem, hala birleştirmeye ihtiyacım var mı?
azec-pdx

4
Şüphesiz bu durumda hızlı bir ilerleme
kaydedecektir

upstream master nasıl tüm yerel dosyaların üzerine yazılır (bu yüzden birleştirme çakışmaları yok) upstream master bu durumda kod önde gidiyor bu yüzden% 100 güveniyoruz ... bunu başardı
snh_nl

1
@snh_nl Yeterince ayrıştıysanız git rebase upstream masterbunun çakışma olmadığını unutmayın upstream/master. Bkz. Git-scm.com/docs/git-rebase (tl; dr: bu sabit, yerel ustanızı akış yukarı olana sıfırlar ve daha sonra tüm yerel taahhütleri ayrışma noktasından yeniden birleştirmeye çalışır)
cowbert

68

Bu videoda doğrudan bir çatalın GitHub'dan nasıl güncelleneceği gösterilmektedir

Adımlar:

  1. GitHub'da çatalını aç.
  2. Tıklayın Pull Requests.
  3. Tıklayın New Pull Request. Varsayılan olarak GitHub orijinali çatalınızla karşılaştırır ve herhangi bir değişiklik yapmadıysanız karşılaştırılacak hiçbir şey olmamalıdır.
  4. Tıklayın switching the base. Şimdi GitHub çatalınızı orijinal ile karşılaştırır ve en son değişiklikleri görmeniz gerekir.
  5. Create a pull requestBu karşılaştırma için tıklayın ve çekme isteğinize tahmin edilebilir bir ad atayın (örn. Orijinalden güncelleme).
  6. Tıklayın Create pull request.
  7. Aşağı kaydırın ve tıklayın Merge pull requestve son olarak Confirmbirleştirin. Çatalınızın herhangi bir değişikliği yoksa, otomatik olarak birleştirebilirsiniz.

3
Ne yazık ki, bu güzel grafik yöntemi, kabul edilen cevabın yorumlarında yukarıda belirtildiği gibi çatalınızda ek gürültü oluşturur. Bu nedenle komut satırı yöntemi önerilir: help.github.com/articles/syncing-a-fork
Jonathan Cross

switching the baseSeçeneği bulamadım
alper

64

kullanın:

git remote add upstream ORIGINAL_REPOSITORY_URL

Bu, akış yukarı yönünü çatallandığınız depoya ayarlayacaktır. Sonra bunu yapın:

git fetch upstream      

Bu, orijinal depodaki master dahil tüm dalları getirecektir.

Bu verileri yerel ana şubenizde birleştirin:

git merge upstream/master

Değişiklikleri çatallı deponuzda, yani başlangıç ​​noktasında yönlendirin:

git push origin master

İşte bu kadar! Orijinal depoyu senkronize etmeyi tamamladınız.


upstream master nasıl tüm yerel dosyaların üzerine yazılır (böylece birleştirme çakışmaları yok) upstream master bu durumda kod önde gidiyor bu yüzden% 100 güveniyoruz ... bunu başardı
snh_nl

Bunun bir yolu, yerel kopyayı silmek ve yeni bir klonlama yapmaktır :)
ARK

1

GitHub masaüstü uygulamasını kullanıyorsanız, sağ üst köşede bir senkronizasyon düğmesi vardır. Üzerine tıklayın, sonra Update from <original repo>sol üst tarafa yakın.

Senkronize edilecek hiçbir değişiklik yoksa, bu devre dışı olacaktır.

İşte bunu kolaylaştırmak için bazı ekran görüntüleri .


1

Kaybedecek bir şey yoksa, sadece çatalınızı da silebilirsiniz, sadece ayarlara gidin ... aşağıdaki tehlike bölgesi bölümüne gidin ve havuzu sil'i tıklayın. Daha sonra depo adını ve şifrenizi girmenizi isteyecektir. Bundan sonra orijinali tekrar çatalıyorsunuz.


1

Klipssiz yapmak istiyorsanız, tamamen Github web sitesinde yapabilirsiniz.

  1. Çatal deponuza git.
  2. Tıklayın New pull request.
  3. Çatalı temel depo olarak ve orijinal (yukarı akış) depoyu baş depo olarak ayarladığınızdan emin olun. Genellikle yalnızca ana dalı senkronize etmek istersiniz.
  4. Create new pull request.
  5. Birleştirme düğmesinin sağındaki oku seçin ve birleştirme yerine yeniden taban seçimini yaptığınızdan emin olun. Ardından düğmesine tıklayın. Bu şekilde gereksiz birleştirme taahhüdü üretmeyecektir.
  6. Bitti.

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.