Ayrı bir uzaktan kumanda eklemeden çatalımı nasıl senkronize edebilirim?


302

someone/foobarGitHub'da çatallandığım bir havuz olduğunu varsayalım me/foobar.

Ayrı bir uzaktan kumanda eklemeye ve oradan düzenli olarak çekmeyi hatırlamaya gerek kalmadan ana depodan yeni taahhütleri doğrudan çatalıma nasıl çekebilirim ?

Amaç:

  • git pull Ana depodan almak
  • git push her şeyi çatalıma göndermek için

26
@Olufemi'nin şaşırtıcı yanıtı, ChristianGosch'un bir yorumda belirttiği gibi, dalınızın üstünde bir "birleştirme taahhüdü" ile sonuçlanmanız ve "karşılaştırılacak hiçbir şeyin" görünmemesi dışında istediğinizi yapıyor gibi görünüyor. Bu, çekmeleri için şube yapmak istediğiniz birçok proje için kabul edilemez gibi görünüyor. Peki, kişisel bilgisayarda arcane git komutlarını çalıştırmadan github'da en temel katılımcı iş akışlarını yapmanın gerçekten bir yolu yok mu? Ya da her katkıda bulunmak istediğimde tüm depomu atmalı ve tekrar çatallamalıyım ??
nealmcb




@nealmcb Şubenizin üst kısmındaki "birleştirme taahhüdü" ile ilgili sorun, yeniden pazarlık yaparsanız kaçınılmaz mı?
Marko

Yanıtlar:


586

Çatallı Git deposu ben / foobar'ı açın .

Karşılaştır'ı tıklayın :

İşte sayfanın örnek bir görüntüsü

Bildirimi alacaksınız:

Karşılaştırılacak bir şey yok.
birisi: usta benden tüm taahhütlerle güncel : usta . Karşılaştırma için tabanı değiştirmeyi deneyin .

Bu sayfadaki tabanı değiştirmek için tıklayın :

İşte sayfada bir örnek

Sonra birisine / foobar'a yaptığınız tüm taahhütleri, çatalladığınız günden sonra göreceksiniz.

Çekme isteği oluştur'u tıklayın :

İşte bir örnek sayfa

Çekme isteğine bir başlık ve belki bir açıklama verin ve Çekme isteği oluştur'u tıklayın .

Sonraki sayfada, sayfanın en altına gidin ve Çekme isteğini birleştir ve Birleştirmeyi onayla'yı tıklayın .

Git deposu ben / foobar'ınız güncellenecek.

Düzenleme: rebase seçenekleri burada gösterilir:

resim açıklamasını buraya girin


50
Bu kafa karıştırıcıdır çünkü taban github'ı değiştirdiğinizde sizi orijinal repo için sayfaya atar, bu nedenle yukarı akış çatalında bir çekme isteği açıyormuşsunuz gibi görünür. Ama tamamen işe yarıyor.
Eduardo

8
Yukarıdaki kafa karıştırıcı bir durum söz önlemek için, daha iyi tıklıyordunuz Editdüğmesini ve elle geçiş base forkiçin me/foobarve head forkiçin someone/foobar. Bu şekilde çok açık
macemers

26
Bir diğeri: Bunu daha önce yapmadıysanız, ancak daha sonra taahhüt geçmişinizin üstünde "birleştirme taahhüdü" varsa, bu iyi çalışır. Böylece "karşılaştırılacak hiçbir şey" görünmez. Bunun yerine "Düzenle" düğmesini kullanmalı ve bunun çalışması için taban ve çatalı el ile değiştirmelidir.
Christian Gosch

26
Bu gülünç birleştirme taahhüdünden kurtulmanın bir yolu yok mu?
kumarharsh

17
@kumar_harsh Eylül 2016'dan bu yana , birleştirme taahhüdünden kaçınan çekme istekleri için bir "yeniden tabanlaştırma ve birleştirme" seçeneği var.
waldyrious

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

Yine de bir uyarı var:
Çatalı değiştiren tek kişi sizseniz bu mükemmel.
Ancak, başkalarıyla paylaşılıyorsa, çatalınızdan çekmeniz gerekebilir, bu durumda tek bir uzaktan kumanda ayrı bir çözümdür.

Düzenleme:
Aslında can git pull git@github.com:me/foobar , ihtar ortadan kaldırmasıdır.
Hatırlanması daha kolay olan seçim sizin.


8

Bunu yapmak için GitHub Web UI kullanarak oldukça basit bir yöntem kullandım :

  1. Orijinal Git deposunu açın (çatallı Git deposunu değil me/foobar)
  2. Src klasörüne atlayın ve değiştirmek istediğiniz dosyayı açın
  3. Kalem simgesini tıklayın. Ana deponuzda ana deponun geçerli sürümüne göre otomatik olarak "yama-1" adlı bir etiket oluşturur: Resim açıklamasını buraya girin
  4. Zevk almak! Resim açıklamasını buraya girin

3
Bunu denemek, temelde orijinal git repo dosyada editörü açar. Orijinal git repo'ya (tasarım gereği) yazma ayrıcalığım yok. Bu yöntem için dosyayı değiştirmeniz gerekir, aksi takdirde dosyayı "kaydetmenin" bir yolu yoktur. Dosyayı kaydetmeden çatallı depomda "patch-1" dalının karşılığını alamadım. Burada ne eksik?
Electro-Bunny

5

"Çekme" uygulaması otomatik çözüm kurulum ve unut olduğunu. Çatalınızın varsayılan dalını yukarı akış deposu ile senkronize eder.

URL'yi ziyaret edin, yeşil "Yükle" düğmesini tıklayın ve otomatik senkronizasyonu etkinleştirmek istediğiniz depoları seçin.

Şube saatte bir kez doğrudan GitHub'da güncellenir, yerel makinenizde yerel kopyanızın senkronize olduğundan emin olmak için ana dalı çekmeniz gerekir.

Ayrıca https://stackoverflow.com/a/58965171/946850 .


1

Başka bir seçenek Update from upstreamRepoName/masterMac için GitHub'daki düğmeyi kullanmaktır (ve Windows için GitHub olduğunu varsayalım).

Resim açıklamasını buraya girin


TIL: GitHub için web arayüzünün ötesinde uygulamalar var :-) [ve bunların karşısındaki deneyimin birleşmemesi utanç verici]
Tom Goodfellow

Bunu Windows'ta görmüyorum
Denis

1
@Denis bu onların eski uygulama. Yeni uygulamalarının buna sahip olduğundan emin değilim.
Steve Moser

Aha. Bu, "GitHub Desktop" uygulamasında çalıştı (Mac için Windows'tan emin değilim).
michaelok

0

Başka bir uzaktan kumanda eklemeden nasıl yapılabileceğini bilmiyorum, ancak her zaman upstreamuzaktan kumanda olarak çatallandığım repoyu ekliyorum, böylece basitçe yapabilirim:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

Bu, tüm şubeler dahil olmak üzere tüm dalları senkronize edecektir. yenilerini oluşturmak ( refs/heads/yalnızca mevcut dalları güncellemek için kaldırın ). Şubelerinizden herhangi biri ayrılırsa, bu dal için bir hata verir.

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.