Soru GitHub çatallı deposunu nasıl güncellerim?


Kısa bir süre önce bir projeyi imzaladım ve birkaç düzeltme yaptım. Daha sonra kabul edilen bir çekme talebi yarattım.

Birkaç gün sonra başka bir katılımcı tarafından başka bir değişiklik yapıldı. Yani çatalım bu değişikliği içermiyor.

Bu değişikliği çatalıma nasıl alabilirim? Katkıda bulunmak için daha fazla değişiklik yaptığımda çatalımı silmem ve yeniden oluşturmam gerekir mi? Yoksa bir güncelleme düğmesi var mı?


2834
2017-08-30 13:53


Menşei


Bu da github UI'den yapılabilir. [Bu öteki postere] kredi vermek istiyorum [1]. [1]: stackoverflow.com/a/21131381/728141 - Mike Schroll
Bu konuda başka bir iyi blog yazısı - Bir GitHub Çatal Güncelleme Tutulması - Arup Rakshit
Bunu Github yardım makalelerinde buldum: help.github.com/articles/syncing-a-fork - Pranav
Bu bir kopyası mı stackoverflow.com/questions/3903817/... ? - David Cary
İşte iki github hesabı kullanarak bunu yapan bir video demosu youtube.com/watch?v=kpE0gTX4ycE - lifebalance


Cevaplar:


Çatallı deponuzun yerel klonunda, orijinal GitHub deposunu "uzak" olarak ekleyebilirsiniz. ("Uzaklar", havuzların URL'leri için takma adlar gibidir) origin örneğin, bir.) Sonra tüm şubeleri bu üst akış havuzundan getirebilir ve çalışmalarınızı yukarı akış versiyonunda çalışmaya devam etmek için yeniden düzenleyebilirsiniz. Gibi görünebilecek komutlar açısından:

# Add the remote, call it "upstream":

git remote add upstream https://github.com/whoever/whatever.git

# Fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:

git fetch upstream

# Make sure that you're on your master branch:

git checkout master

# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:

git rebase upstream/master

Ana dalınızın geçmişini yeniden yazmak istemiyorsanız (örneğin, başkaları tarafından klonlanmış olabilir), o zaman son komutu git merge upstream/master. Ancak, olabildiğince temiz olan daha fazla çekme isteği yapmak için, yeniden inşa etmek muhtemelen daha iyidir.


Eğer şubeni üzerine yazarsan upstream/master GitHub'daki kendi çatallı deponuza itmek için itmeyi zorlamanız gerekebilir. Bunu yaparsın:

git push -f origin master

Sadece kullanmanız gerekir -f rebased sonra ilk kez.


3103
2017-08-30 14:01



Çatalağınız sadece github üzerinde bulunduğundan ve github'un web arayüzü aracılığıyla birleştirme işlemleri için araçları bulunmadığından, doğru cevap yukarı yönde birleştirme işlemini yerel olarak yapmak ve değişiklikleri tekrar çatalınıza itmektir. - Tim Keating
İşte github ile çalışmaya başladığım harika bir öğretici: gun.io/blog/how-to-github-fork-branch-and-pull-request - Tim Keating
Temiz bir durumla başlamanızı sağlamak için kendi ana dalınızı yeniden oluşturmak zorunda kalmak yerine, muhtemelen ayrı bir dal üzerinde çalışmanız ve bundan bir çekme isteği yapmanız gerekir. Bu, efendinizi gelecekteki tüm birleşimler için temiz tutar ve geçmişinizi yeniden yazmak zorunda kalmanızı engeller. -f Bu, sürümünüzü klonlayabilecek herkesi rahatsız ediyor. - Mateusz Kowalczyk
Rebase komutu yerine aşağıdakileri kullandım: git merge --no-ff upstream/master Bu sayede işlemleriniz artık zirvede değil. - Steckdoserich
Başka bir Git hatası. Bu araçların dağıtılmış işbirliğini desteklemesi gerekiyorsa, neden temel iş akışını gerçekleştirmek bu kadar zor? 4 milyon kişi ve 2200 yükseltim, aracın başarısız olduğu anlamına gelir. "Orijinal GitHub deposunu" uzak "olarak ekleyebilirsiniz - Neden bunu yapmak zorunda? Neden çatal sırasında yapılmaz? Bu araç hakkında ne kırılmış? - jww


Mayıs 2014'ten itibaren bir çatalı doğrudan GitHub'dan güncellemek mümkündür. Bu hala Eylül 2017 itibariyle çalışıyor, FAKAT kirli bir taahhüt geçmişine yol açacaktır.

  1. Çatalınızı GitHub'da açın.
  2. Tıklamak Çekme Talepleri.
  3. Tıklamak Yeni Çekme İsteği. Varsayılan olarak, GitHub orijinali çatalınızla karşılaştırır ve herhangi bir değişiklik yapmazsanız karşılaştırılacak bir şey olmamalıdır.
  4. Click üssü değiştirerek Bu bağlantıyı görürseniz. Aksi takdirde, el ile taban çatalı çatalına ve kafa çatal yukarı yönde. Şimdi GitHub, çatalınızı orijinalle karşılaştırır ve en son değişiklikleri görmelisiniz. enter image description here
  5. Çekme isteği oluştur ve çekme isteğinize tahmin edilebilir bir ad atayın (ör. Update from original).
  6. Aşağı ilerleyin Çekme isteğini birleştirama henüz bir şey tıklatma.

Şimdi üç seçeneğiniz var, ancak her biri daha az temiz bir taahhüt geçmişine yol açacak.

  1. Varsayılan, çirkin birleştirme işlemi oluşturur.
  2. Açılır menüyü tıklar ve "Squash ve birleştir" i seçerseniz, tüm araya giren tüm işlemler tek tek ezilecektir. Bu çoğu zaman istemediğin bir şey.
  3. Eğer tıklarsan Rebase ve birleştirmeTüm taahhütler "sizinle" yapılacak, orijinal PR'ler PR'nize bağlanacak ve GitHub görüntülenecektir This branch is X commits ahead, Y commits behind <original fork>.

Evet, Repo'yu GitHub web kullanıcı arayüzünü kullanarak yukarı akışıyla güncel tutabilirsiniz, ancak bunu yaptığınızda taahhüt geçmişiniz tamamlanır. Sopa komut satırı bunun yerine - kolay.


642
2018-05-25 07:31



Bu harika bir zaman çalıştı. Bu işlem ikinci kez aynı şekilde çalışmadı: "Tabanın değiştirilmesi" bağlantısı görünmedi. Ve "Çekme talebi oluşturmak için tıklayın" a bastığımda, SOURCE repo'sunda bir PR oluşturdu. İstediğimi değil .. - javadba
Hala çalışıyor (Marchi 2015), "Tabanı değiştirme" linki artık yok. "Taban" açılır menüsünü değiştirmek zorundasınız. Bu sayede hem çatalınızı işaretleyin hem de istediğiniz yere götürecek "Karşılıklı karşılaştırın" komutunu alacaksınız. - mluisbrown
Nisan 2015. Çalışmalar. Teşekkürler. "Tabana geçiyorum" aldım. Ancak, 6. adım "Oluşturma isteği oluştur" -> yorum gir -> "Çekme isteği oluştur" idi. Orijinalin önündeki 1 taahhütle sona erer. - cartland
@cartland (ya da başkaları) - evet, diyor ki "Bu dal 1 önündedir ..." Bu endişelenecek bir şey mi? Bu mesajdan kurtulmak mümkün mü? - RenniePet
basitçe güncelleme veya senkronizasyon düğmesi ile daha iyi olmaz! - transformer


İşte GitHub'un resmi belgesi Çatal senkronizasyonu:

Çatal senkronizasyonu

Kurulum

Senkronizasyondan önce, akış yukarı depoya işaret eden bir uzaktan kumanda eklemeniz gerekir. Orijinal olarak çatalladığınızda bunu yapmış olabilirsiniz.

İpucu: Ça¤r ›s› n ›n› z ›yaln› zca deponuzun yerel kopyas ›n› güncellefltirir; deponuzu GitHub'da güncellemez.

$ git remote -v
# List the current remotes
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)

$ git remote add upstream https://github.com/otheruser/repo.git
# Set a new remote

$ git remote -v
# Verify new remote
origin    https://github.com/user/repo.git (fetch)
origin    https://github.com/user/repo.git (push)
upstream  https://github.com/otheruser/repo.git (fetch)
upstream  https://github.com/otheruser/repo.git (push)

Senkronizasyon

Deponuzu yukarı akış ile senkronize etmek için iki adım gereklidir: önce uzaktan kumandayı getirmelisiniz, ardından istediğiniz şubeyi yerel şubenize birleştirmelisiniz.

getiriliyor

Uzak depodan getirilmesi, şubelerine ve ilgili taahhütlerine yol açacaktır. Bunlar özel şubeler altında yerel deponuzda saklanır.

$ git fetch upstream
# Grab the upstream remote's branches
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/otheruser/repo
 * [new branch]      master     -> upstream/master

Şu anda yerel bir şubede, ana akım / usta saklanan ana akımın ana şubesine sahibiz

$ git branch -va
# List all local and remote-tracking branches
* master                  a422352 My local commit
  remotes/origin/HEAD     -> origin/master
  remotes/origin/master   a422352 My local commit
  remotes/upstream/master 5fdff0f Some upstream commit

birleştirme

Artık yukarı havza deposunu getirdiğimiz için, değişikliklerini yerel şubemize dahil etmek istiyoruz. Bu, şubemizi yerel değişimlerimizi kaybetmeden yukarı akışla senkronize edecek.

$ git checkout master
# Check out our local master branch
Switched to branch 'master'

$ git merge upstream/master
# Merge upstream's master into our own
Updating a422352..5fdff0f
Fast-forward
 README                    |    9 -------
 README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

Yerel şubenizde herhangi bir benzersiz taahhüt yoksa, git yerine "hızlı ileri" gerçekleştirir:

$ git merge upstream/master
Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

İpucu: Deponuzu GitHub'ta güncellemek istiyorsanız, talimatları izleyin. İşte


365
2017-10-21 23:04



Bu, yerel çatalımı günceller, ancak Github.com'daki çatalım hala "43 işlemin arkasında" yazıyor. Usta değişikliklerini Github.com çatalımla birleştirmek için kendime bir çekme talebi oluşturmak için lobziğin tekniğini kullanmalıydım. - Michael McGinnis
@MichaelMcGinnis Yerel olarak birleştikten sonra, değişikliklerinizi github'a zorlamak zorunda kalacaksınız. git push origin master - jumpnett
İle itmek akıllı olabilir --follow-tags: stackoverflow.com/a/26438076/667847 - kenny
Bütün şubeler için ayrı ayrı yapmalıyım git merge upstream/master, sonra şube geliştirmek ve yapmak için kontrol git merge upstream/develop - Shobi P P
stackoverflow.com/a/14074925/470749 bana yardımcı oldu çünkü ben oluyordum Permission denied (publickey). fatal: Could not read from remote repository. Facebook'un Github hesabından giriş yapmaya çalışırken. - Ryan


Birçok cevap çatalı hareket ettiriyor ileride bir taahhüt Ebeveyn deposunun Bu cevap, bulunan adımları özetler. İşte hangi olacak Çatalınızı ebeveyn ile aynı şekilde hareket ettirin.

  1. Dizini yerel deponuza değiştirin.

    • Değilseniz ana branşa geçin git checkout master
  2. Ebeveyni uzak bir depo olarak ekle git remote add upstream <repo-location>

  3. Konu git fetch upstream
  4. Konu git rebase upstream/master

    • Bu aşamada, yazarak neyin birleştirileceğini taahhüt eder. git status
  5. Konu git push origin master

Bu komutlar hakkında daha fazla bilgi için bkz. Aşama 3.


81
2017-08-05 14:59



@MT: Yine de bu komutları nereye giriyorsunuz? Sorunun özü, anladığım kadarıyla, kişisel kimliğinizi yeniden senkronize etmektir. GitHub ana proje ile çatal ve Bunu GitHub'dan yap. Başka bir deyişle, uzak çatalınızı nasıl güncelleyebilirsiniz? olmadan yerel bir depo? - John Y
@JohnY GitHub kullanımı her zaman ek bir taahhüt oluşturacaktır. Ekstra işlemden kaçınmak için tüm bunları yerel bir repo üzerinde bir kabukta yapmanız gerekir. - Jonathan Cross


Kasım 2013'ten bu yana GitHub'a açık bir gayri resmi özellik talebi yapıldı ve yerel bir çatağın yukarı yönde senkronize olmasını sağlamak için çok basit ve sezgisel bir yöntem eklemelerini isteyin:

https://github.com/isaacs/github/issues/121

Not: Özellik isteği gayri resmi olduğundan, iletişim kurmanız da önerilir support@github.com Bu şekilde uygulanacak bir özellik için desteğinizi eklemek. Yukarıdaki gayri resmi özellik talebi, uygulanan varlığın miktarının kanıtı olarak kullanılabilir.


39
2018-02-21 10:42





Önsöz: Çatalınız "kökeni" dir ve çatal attığınız depo "upstream" dir.

Çatalını zaten bilgisayarınıza şu şekilde bir komutla klonladığınızı varsayalım:

git clone git@github.com:your_name/project_name.git
cd project_name

Eğer bu verilirse, şu sırayla devam etmeniz gerekir:

  1. Klonlanmış deponuza "upstream" ("origin") ekleyin:

    git remote add upstream git@github.com:original_author/project_name.git
    
  2. İşlemleri (ve şubeleri) "üst akış" dan getir:

    git fetch upstream
    
  3. Çatalınızın "ana" dalına geçin ("kökeni"):

    git checkout master
    
  4. "Ana" branşındaki değişiklikleri sakla:

    git stash
    
  5. "Upstream" in "master" dalındaki değişiklikleri "origin" inizin "master" dalına birleştirin:

    git merge upstream/master
    
  6. Varsa birleştirme çakışmalarını çözün ve birleştirme işlemini gerçekleştirin

    git commit -am "Merged from upstream"
    
  7. Değişiklikleri çatalına doğru itin

    git push
    
  8. Stashed değişikliklerinizi geri alın (varsa)

    git stash pop
    
  9. Sen bittin! Tebrikler!

GitHub ayrıca bu konuyla ilgili talimatları sağlar: Çatal senkronizasyonu


29
2018-03-16 12:24



Kısmen yardımcı oldu: git remote add upstream git@github.com:original_author/project_name.git sadece bir takma ad git remote add upstream https://github.com/original_author/project_name.git ? - Wolf
KurtBunu şimdiye kadar bildiğini tahmin etmek, ancak posterity için ... ssh formatıdır. help.github.com/articles/configuring-a-remote-for-a-fork - Brad Ellis


Eğer benim gibi olursan Asla doğrudan ustaya bir şey yapmayınGerçekten de, aşağıdakileri yapabilirsiniz.

Çatalınızın yerel klonundan, yukarı akışlı uzaktan kumandanızı oluşturun. Bunu sadece bir kez yapmanız gerekir:

git remote add upstream https://github.com/whoever/whatever.git

Ardından, üst akış depo ana dalını yakalamak istediğinizde aşağıdakileri yapmanız gerekir:

git checkout master
git pull upstream master

Asla kendiniz hakkında hiçbir şey yapmadığınızı varsayarak, zaten yapılmalı. Artık yerel efendinizi menşe uzaktan GitHub çatalınıza itebilirsiniz. Geliştirme şubenizi, şu andaki güncel yerel yöneticinizde de yeniden yapılandırabilirsiniz.

Yani başlangıçtaki kurulum ve ana ödeme geçmişini geçtikten sonra, yapmanız gereken tek şey ustanızı yukarı akış ile senkronize etmek için aşağıdaki komutu çalıştırmaktır: git yukarı çıkış ustası.


22
2018-01-03 16:59