GitHub çekme isteği nasıl yapılır


283

GitHub'da barındırılan başka bir veri havuzuna nasıl bir çekme isteği oluşturur ve / veya gönderirim?


2
Bu, GitHub yardım sayfalarında yeterince açıklanmamış mı?
lanzz

27
@lanzz Hayır, yardım sayfasında ilk çekme isteklerimi yapmadan önce bilmem dileğiyle birkaç yararlı ipucu bulunmuyor (aşağıya bakın).
VonC

9
@ianzz elbette Github'ın sayfası "yeterli", ancak öğrenmenin birçok yolu var. Yapmaya çalıştığım, başlangıç ​​seviyesinde bir eğitim yapmaktı. Github'ın açıklamasında eksik bulduğum şey şuydu: 1) bir kaynakta yer almamıştı (açıkça bağlantılı olmayan iki sayfa), 2) özlü değildi (bu sayfalar çok uzun, uzun = ezici), 3) kilit bölümlerde insani terimlerle açıklanmamıştır. Öğretimde, daha deneyimli bir öğretmenin yeni başlayanların ne bilmediğini bilmek her zaman zordur. Kendimi yeni başlayanların yerine koymak, bunu yazmaktaki amacımdı.
tim peterson

12
Uzun, ezmek anlamına gelebilir, bu da abort = öğrenme yok anlamına gelebilir . Birisi, elbette ki bunlardan biri olmayacak olan birçok yolla “ilgili süreci anlamaya” son verebilir. Alev savaşını bitirmek için cevap vermeye gerek yok, nereden geldiğini anlıyorum.
tim peterson

8
Kendi çatalınızdan bir çekme talebi yaparsınız. Bu kesinlikle benim ilk varsayımım değildi .
Derek Illchuk

Yanıtlar:


236

(Resmi " GitHub Yardım 'Çekme isteklerini kullanma' sayfasına " ek olarak
ayrıca bkz. " GitHub'da Çatallama ve Dallanma ", " GitHub'da başlangıç ​​noktası ve yukarı akış arasındaki fark nedir ")

Çekme isteklerinde çift ipuçları:

Bir repoyu ilk kez çatalladığınızı varsayarsak, sahip olduğunuz çatalda yapmanız gerekenler:

  • bir şube oluşturun: bir şubedeki değişikliklerinizi izole edin. Birden fazla değişikliği aynı anda masterbiriktirip karıştırabileceğiniz bir çekme isteği oluşturmayın .
  • bu şubeyi yeniden oluştur: bu şubeden bir çekme isteği yapmış olsanız bile, üstüne yeniden basmak origin/master( yamanızın hala çalıştığından emin olmak) çekme isteğini otomatik olarak güncelleyecektir (hiçbir şeyi tıklamanıza gerek yoktur)
  • bu dalı güncelleyin : çekme isteğiniz reddedilirse, yeni taahhütler ekleyebilir ve / veya geçmişinizi tamamen yeniden yapabilirsiniz: mevcut çekme isteğinizi tekrar etkinleştirir.
  • o dalı "odakla" : yani, konusunu "sıkı" yapın, binlerce sınıfı ve tüm uygulamayı değiştirmeyin, yalnızca iyi tanımlanmış bir özelliği ekleyin veya düzeltin , değişiklikleri küçük tutun .
  • o dalı silme : kabul edildikten sonra çataldan (ve git remote prune origin) o dalı güvenle silebilirsiniz . GitHub GUI, çekme isteği sayfanızdaki şubenizi silmenizi önerir.

Not: Çekme İsteğinin kendisini yazmak için bkz. " Mükemmel çekme isteği nasıl yazılır " (Ocak 2015, GitHub)


Mart 2016: Yeni PR birleştirme düğmesi seçeneği: bkz. " İnceleme yorumları sonrasında çekme isteği üzerine Github squash web arayüzünden çalışıyor mu? ".

squash

Repoyu sürdüren kişi merge --squashbu PR taahhütlerini seçebilir .


Çekme Talebinden Sonra

Son nokta ile ilgili olarak, 10 Nisan 2013'ten bu yana, " Yeniden tasarlanan birleştirme düğmesi ", şube sizin için silinir:

yeni birleştirme düğmesi

Birleştirme işleminden sonra şubeleri silmek de basitleştirilmiştir.
Silme işlemini fazladan bir adımla onaylamak yerine, sildiğinizde dalı hemen kaldırır ve yeniden ihtiyaç duyduğunuzda dalı geri yüklemek için uygun bir bağlantı sağlarız .

Bu, bir çekme isteğini birleştirdikten sonra dalı silme konusunda en iyi uygulamayı doğrular.


istek-istek ve istek-çekme


"depo" için e-notlar (sic)

<humour>

Bu (çekme isteği) GitHub tarafından düzgün bir şekilde tanımlanmamıştır!

Neyse ki, gerçek bir iş haberleri organizasyonu bilir ve pull-replace'i 'e-note' ile değiştirmek için bir e-not vardır :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

Senin repo Yani o tory bir e-nota ihtiyacı ... Fox Business sormak . Onlar biliyorlar.

</humour>


2
- @ VonC bunun için teşekkürler. Söylediklerinizin söylediklerimden nasıl farklı olduğunu göstermek için bazı kodlar verir misiniz? branchVs masterkarar biri aslında kullanacağı konusunda bir şey teorik çözümünden benim / Github yanıtını almak için kritik bir gibi görünüyor.
tim peterson

1
@timpeterson, bu daldaki geçmişi tamamen değiştirebileceğiniz ve çekme isteğini otomatik olarak güncelleyeceği gerçeği burada önemlidir: çünkü yukarı akış projesinin sonuncusunda bir çekme isteği yapılmalıdır. Bu yukarı akış deposunda yeni taahhütler varsa, şubenizi üstüne yeniden adlandırmanız (o dalın geçmişini değiştirerek) ve çatalınıza geri itmeniz gerekir: bu, çekme isteğinizi otomatik olarak günceller.
VonC

4
Tamir etme kısmını anlamıyorum. Bu ne yapar? ( bu sayfa roket bilimi gibi geliyor ama inanmıyorum). O noktada "yeniden basan" hangi komutu verirdiniz?
Camilo Martin

1
@ CamloMartin PR dalında iseniz, o zaman a git pull --rebase upstream/mastergerçekten iyi.
VonC

1
@vikramvi ustası, çatalladığınız orijinal repo ile ortak bir şubedir. O dal daima orijinal repoyu yansıtmalıdır. PR için bir dalda düzeltmelerinizi izole edersiniz. Master'ı sadece orijinal repoda ne olduğunu bilmenin bir yolu olarak kullanırsınız (ve kolay bir çekme isteği birleştirmesi sağlamak için düzeltme dalınızı yeniden oluşturmak için)
VonC

202

Çekme talebinin nasıl yapılacağını öğrenmek için Github'daki iki ayrı yardım sayfasını takip ettim (aşağıda madde işaretleri olarak bağlantılı). Aşağıdaki komut satırı komutları Bölüm 1 içindir . Asıl çekme talebi olan Bölüm 2 , tamamen Github'un web sitesinde yapılır.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • Bölüm 1 : Birinin Reposunu Çatalla: https://help.github.com/articles/fork-a-repo

    1. katkıda bulunmak istediğiniz repodaki 'çatal' düğmesini tıklayın, bu durumda: Dwolla'nın PHP repou (Dwolla / dwolla-php)
    2. bu durumda yeni oluşturulan çatalınızın URL'sini alın: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. yaz git clone->cd dwolla-php->git remote->git fetchçatalınızı bilgisayarınızda bir yere klonlamak için yukarıdaki diziyi (yani, bu örnekte "kopyala / yapıştır" third_party TimPeterson$) : ve ana repo ile senkronize edin (Dwolla / dwolla-php)
    4. yerel repoda değişiklik yap
    5. git add->git commit->git pushdeğişikliklerinizi uzak repoya göndermek için yukarıdaki diziyi yazın , yani Github'daki çatalınız (tim-peterson / dwolla-php)
  • Bölüm 2 : Çekme Talebi Yapın: https://help.github.com/articles/using-pull-requests

    1. Github'daki çatalınızın web sayfasına gidin ( https://github.com/tim-peterson/dwolla-php )
    2. 'çekme isteği' düğmesini tıklayın
    3. çekme isteğine bir ad verin, yaptığınız değişikliklerin ayrıntılarını doldurun, gönder düğmesini tıklayın.
    4. sen bittin!!

4
- @ alexgray, bash istemlerini bıraktım, örneğin, Tims-MacBook-Pro:third_party TimPeterson$çünkü bu bir acemi öğreticisi ve bu istemler kullanıcıyı yönlendirmeye yardımcı oluyor.
tim peterson

1
Evet. Teşekkür ederim. Takip edebileceğim çalışan bir örnek. Neden git hub'ınız yok?
Yedi Yıl

Sonra git fetch upstream, kullanmakta, yerel kopya ile üst düzey değişiklikleri birleştirmek gerek yok git checkout mastero zaman git merge upstream/master?
Sparhawk

@Sparhawk Hayır, değişikliklerinizi çatalınızda bulunan master ile birleştirmenize gerek yok. Diğer repoya yönelik çekme talebi sadece şubeden ayrılabilir. Ancak, gittiğinizde çatalınızın ustasını da güncellemeniz genellikle iyi bir uygulama olacaktır, böylece "gerçek" repoda değişiklikler yapar ve sık sık çatallı repodaki döngüye geri döner.
ely

1
@HimanshuShekhar evet ama github masaüstü uygulamasını veya API'lerini kullanmanız gerekiyor. Tarayıcı benim için daha kolay.
tim peterson

70

Çekme isteği yapmak için aşağıdaki adımları uygulamanız gerekir:

  1. Bir depoyu çatallayın (çekme isteği yapmak istediğiniz). Depo sayfasındaki çatal düğmesini tıkladığınızda, github kullanıcı adınızın önünde ayrı bir github deposu olacaktır.
  2. Havuzu yerel makinenize kopyalayın. Yerel makinenize yüklediğiniz Github yazılımı bunu sizin için yapabilir. Depo adının yanındaki klon düğmesini tıklayın.
  3. Dosyalarda yerel değişiklikler / taahhütler yapın
  4. değişiklikleri senkronize et
  5. github çatallı deponuza gidin ve şube düğmesinin yanındaki "Karşılaştır ve İncele" yeşil düğmesini tıklayın. (Düğmede simge var - metin yok)
  6. Değişikliklerinizi gösteren yeni bir sayfa açılacak ve ardından isteği, çatalla doldurduğunuz deponun orijinal sahibine gönderecek olan çekme isteği bağlantısını tıklayın.

Bunu anlamam biraz zaman aldı, umarım bu birisine yardım eder.


3
Çekme talebinde bulunmadan önce bir repoyu çatallaman gerektiği belli değildi. Ben itilmiş bir taahhüt sadece kamu yazma erişimi olan ve daha sonra oradan birleştirilen bir tür bekleyen şube gideceğini düşündüm. Teşekkürler!
Chris Arena

16

İnsanların ilk GitHub çekme talebini yapmalarına yardımcı olmak için bir proje başlattım. İlk PR'nizi burada yapmak için uygulamalı öğreticiyi yapabilirsiniz

İş akışı aşağıdaki gibi basittir:

  • Repoyu Github'da Çatalla
  • Klon repo düğmesine tıklayarak klon url'sini alın
  • Terminale git ve çalıştır git clone <clone url you copied earlier>
  • Yaptığınız değişiklikler için bir şube oluşturun git checkout -b branch-name
  • Gerekli değişiklikleri yapın
  • Değişikliklerinizi yapın git commit
  • GitHub'da değişikliklerinizi çatalınıza aktarın git push origin branch-name
  • Bir Compare and pull requestdüğme görmek için GitHub'daki çatalınıza gidin
  • Üzerine tıklayın ve gerekli ayrıntıları verin

15

Bir github.com hesabı olan, ancak komut satırına "git" yazdığımızda kötü bir hata mesajı alanlarımız için, tüm bunları tarayıcınızda nasıl yapacağınız aşağıda açıklanmıştır :)

  1. Tim ve Farhan'in yazdığı gibi: Projenin kendi kopyasını topla: Adım 1: Çatal
  2. Birkaç saniye sonra projenin kendi çatallı kopyasına yönlendirileceksiniz: Adım 2
  3. Değiştirmeniz gereken dosyalara gidin ve araç çubuğundaki "Bu dosyayı düzenle" yi tıklayın: 3. Adım: Dosya düzenleme
  4. Düzenledikten sonra değişiklikleri açıklayan birkaç kelimeyi yazın ve ardından ana dalda olduğu gibi "Değişiklikleri uygula" yı yazın (çünkü bu yalnızca kendi kopyanızdır ve "ana" proje değildir). 4. Adım: Değişiklikleri gerçekleştirin
  5. Düzenlemeniz gereken tüm dosyalar için 3. ve 4. adımları tekrarlayın ve ardından proje kopyanızın kök dizinine dönün . Orada, yeşil "Karşılaştır, incele ..." düğmesini tıklayın: 5. Adım: Göndermeye başlayın
  6. Son olarak, isteğinizin başlığını ve açıklamasını tekrar kontrol ettikten sonra "Çekme isteği oluştur" .. 'u ve ardından "Çekme isteği oluştur" u tekrar tıklayın : resim açıklamasını buraya girin

3

Tim Peterson'ın talimatlarını izledim ama değişikliklerim için yerel bir şube oluşturdum. Ancak, ittikten sonra GitHub'da yeni şubeyi görmedim. Çözüm push komutuna -u eklemekti:

git push -u origin <branch>

yukarıdaki URL'deki 2 kullanıcı adını fark ettiniz mi? ilk tim-peterson2 iseDwolla
tim peterson

3
Ayrıca, bu cevabımın bir yorumu olarak daha iyidir. Bazı indirimler alabilirsiniz.
tim peterson

1

Sizin için bir PR şubesi kurma işini yapan bir bash programı yazdım. Gerekirse çatallama, yukarı akışla senkronizasyon, yukarı akış uzaktan kumandayı kurma vb. Gerçekleştirir ve sadece değişikliklerinizi yapmanız, bir PR göndermeniz ve göndermeniz yeterlidir.

Nasıl çalıştırdığınız aşağıda açıklanmıştır:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

Programı burada bulacaksınız ve deposu aynı zamanda nasıl çalıştığını anlamak istiyorsanız aynı işlemi manuel olarak gerçekleştirmek için adım adım bir kılavuz ve ayrıca özellik dalınızı nasıl güncel tutacağınız hakkında daha fazla bilgi içerir. yukarı akış ustası ve diğer yararlı çerezlerle tarih.


0

En basit GitHub Çekme Talebi olan web arayüzünden budala kullanmadan.

  1. Bir GitHub hesabı kaydedin, giriş yapın ve ardından depodaki değiştirmek istediğiniz sayfaya gidin.
  2. Kurşun kalem simgesini tıklayın ,

    konumun yakınındaki metni arayın, istediğiniz düzenlemeleri yapın ve onaylamak için önizleyin. Önerilen değişikliğe 50 karaktere kadar bir açıklama ve isteğe bağlı olarak genişletilmiş bir açıklama verin ve ardından Dosya Değiştirmeyi Öner düğmesini tıklayın.

  3. Bunu okuyorsanız, depoya (proje klasörleri) yazma erişiminiz olmaz, böylece GitHub hesabınızdaki havuzun (aslında bir dal) bir kopyasını oluşturur. Click çekme oluşturma isteği düğmesini.

  4. Çekme İsteği'ne bir açıklama verin ve yorum ekleyin, ardından Çekme isteği oluştur düğmesini tıklayın.
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.