Git ile bir GitHub çekme isteğini nasıl kontrol edebilirim?


251

Önceden oluşturulmuş bir çekme isteğine (GitHub web arayüzü üzerinden oluşturulmuş) göz atmak istiyorum. Refs / pull veya refs / pull / pr gibi farklı yerleri aradım ve buldum

Ama fetch = +refs/pull/*/head:refs/remotes/origin/pr/*git config dosyasına eklediğimde ve git getirme yaptığımda

Neyi yanlış yapıyorum? GitHub, çekme / xyz öğelerini otomatik olarak oluşturmalı mı yoksa bir şey yapılandırmam mı gerekiyor?


Yapılandırma dosyanızın tam uzak bölümü neye benziyor?



Bu soruya son verdim, ama aslında
EpicPandaForce

1
İkinci paragraf tam bir cümle değildir. "Ama eklediğimde ... ve git getirme" - bunları yaptığınızda ne olur?
cp.engr

Yanıtlar:


385

Yerel reponuza uzak bir PR getirmek için,

git fetch origin pull/ID/head:BRANCHNAME

Burada IDçekme isteği kimliği ve BRANCHNAMEoluşturmak istediğiniz yeni dalın adıdır. Şubeyi oluşturduktan sonra,

git checkout BRANCHNAME

Daha fazla bilgi için resmi GitHub belgelerine bakın .


11
Bunu yerel çatallı repoma bir yukarı yönlü repodan bir pr getirmek için kullandım, başlangıç ​​noktasıyla da başlangıç ​​kaynağını değiştirebilirsiniz.
Jngai1297

18
git fetch origin pull/1/head:githubusername
Anthony

1
nasıl geri alınır?
fico7489

8
@Antoine BRANCHNAME, dalı adlandırmak istediğiniz her şeydir . Zaten var olan (örneğin master) bir ad kullanmaya çalıştığınızı tahmin ediyorum , bu işe yaramadı, bu yüzden işe yarayan kullanıcı adınızı denediniz, çünkü bu ada sahip bir şube değildi. Belki de söylediklerini yanlış anlıyorum.
Nateowami

1
Yerel repo'nuzuorigin çatalınıza ve upstream- orijinal depoya işaret edecek şekilde yapılandırmış olabilirsiniz ( örneğin, help.github.com/articles/configuring-a-remote-for-a-fork ). Değiştirmek için emin olun originiçin upstreamözgün repo çekme isteğini getirmek istiyorsanız, bahsedilen komuta.
mvlabat

127

Bu, bir şube adlandırmanıza gerek kalmadan getirilir:

git pull origin pull/939/head

Makinemde belirli bir çekme isteğini nasıl alabilirim?


Bu gerçekten yeterli, tks
rll

Bu benim için çalıştı, timbo'nun getirme yöntemi bir şey yaptı ama doğru olanı değil
malhal

30
Örneğin, ana dalınızdayken bunu yaparsanız, bu dalın doğrudan bu dalda çalışacağını unutmayın. Çekme talebini hazırlama için ayrı bir şubeye getirmek istiyorsanız, @ timbo'nun cevabını deneyin.
phoenix

3
@Phoenix'in söylediği gibi. Çekme isteği dalının master değil kendi makinemde çoğaltılmasını istiyorum.
Paul Chernoch

Bu, daha sonra çekme isteğindeki değişiklikleri yerel şubenize çekmek istiyorsanız da işe yarar.
luator

52

Bu öz , git getirme işleminde ne olduğunu açıklar:

Açıkçası, github URL'sini projenizin URL'siyle eşleşecek şekilde değiştirin. Sonunda şöyle görünür:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Şimdi tüm çekme isteklerini alın:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

Belirli bir çekme isteğini kontrol etmek için:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

Bu görevi otomatikleştirmek için sorun 259'da listelenen çeşitli komut dosyalarınız var . Git-ekstralar proje komutu önermektedir (uygulanan PR 262 )
git-pr

git-pr(1) - Yerel olarak bir çekme isteğini denetler

ÖZET

git-pr <number> [<remote>]
git-pr clean

AÇIKLAMA

GitHub çekme isteği numarasını temel alan bir yerel şube oluşturur ve daha sonra bu şubeye geçer.

Alınacak uzaktan kumandanın adı. Varsayılan değeriorigin .

ÖRNEKLER

Çekme isteği dışında bu kontroller 226dan origin:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

38

Yerel bir şube oluşturmadan ve getirmeyi HEAD müstakil durumda olmayı tercih ederim . Yerel makinemi gereksiz yerel şubelerle kirletmeden çekme talebini hızlı bir şekilde kontrol etmeme izin veriyor.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

nerede IDbir çekme isteği kimliğidir ve upstreamorijinal çekme isteği oluşturuldu nerede (bu olabilirorigin , örneğin).

Umut ediyorum bu yardım eder.


1
Bu çözümü seviyorum. Avantajlarından biri, PR daha fazla taahhütle güncellenirse, bunu tekrar çalıştırabilir ve yeni taahhütleri çeker.
Alex Johnson

14

Steven Penny'nin cevabına atıfta bulunarak, bir test dalı oluşturmak ve PR'ı test etmek en iyisidir. İşte yapacağınız şey.

  1. Halkla İlişkileri yerel olarak birleştirmek için bir test dalı oluşturun. Ana dalda olduğunuzu varsayarsak:

git checkout -b test

  1. PR değişikliklerini test şubesine alın

git pull origin pull/939/head:test

Artık bu yerel test dalındaki değişiklikleri (bu durumda test olarak adlandırılır ) güvenle test edebilirsiniz ve memnun olduğunuzda GitHub'dan her zamanki gibi birleştirebilirsiniz.


1
Daha da iyi giderdim - bir çalışma ağacı yaratırdım, yeni bir şubeye koyarım testve sonra PR'yi çekerdim - bu şekilde bittiğinde şubeleri yerel olarak geri yüklememe ihtiyacım olmaz; Ben sadece çalışma ağacını imha ediyorum. Aslına bakarsanız checkout -bartık HİÇBİR ZAMAN - her zaman bir çalışma ağacı ve sonra da dal oluşturuyorum. Disk ucuz. Tabii ki, bunu yapan bir senaryom var; Gerekli tüm komutları tek tek yazmıyorum.
mpersico

11

Github.com kullanıyorsanız, "Çekme istekleri" ne gidin, ilgili çekme isteğine tıklayın ve sonra "komut satırı talimatları" bağlantısına tıklayın: Github.com'daki komut satırı talimatları


Diyelim ki, aslında PR'nin yeni / değiştirilmiş dosyalarını indirmek için github.com'a bakarken bir yol var mı? Yani, github'daki bir repoya baktığınızda, kullanışlı "zip olarak indir" düğmesini tıklayabilir veya gerçekten de, projenin her bir (tüm) dosyasına tıklayabilir ve sadece bakabilirsiniz. PR için, sadece "dosyaya bakmak" için nasıl tıklayacağımı göremiyorum - ne demek istediğimi biliyor musun? Bir şey mi kaçırıyorum? Şerefe!
Fattie

9

Depodan çekme isteklerini almak git configiçin yeni bir kural yazmak üzere command komutunu kullanabilirsiniz .git/config:

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

Ve sonra sadece:

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

8

Yukarıdaki seçeneklerden bazılarındaki sorun, birisi PR'yi açtıktan sonra PR'ye daha fazla taahhütte bulunursa, size en güncel sürümü vermeyecek olmasıdır. Benim için en iyi olan şey - PR'a gidin ve 'Komisyonlar'a basın , en son taahhüt karmasını görmek için aşağıya kaydırın resim açıklamasını buraya girin ve sonra sadece git kasasını kullanın, yani

git checkout <commit number>

yukarıdaki örnekte

git checkout 0ba1a50


2
Stackoverflow.com/a/30584951/659732'degit fetch origin pull/ID/head:BRANCHNAME bahsedilen yaklaşımla tam olarak bu soruna çarptım . Çözüm için teşekkürler!
joewiz


5

Bitbucket için, kelimenin yerine gerek pulliçin pull-requests.

İlk olarak, çekme isteği URL stilini git ls-remote originkomutla onaylayabilirsiniz .

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

Gördüğünüz gibi, refs/pull-requests/1503/frombunun yerinerefs/pull/1503/from

Daha sonra cevaplardan herhangi birinin komutlarını kullanabilirsiniz.


4

Kazara git-ekstralar tarafından sağlananla neredeyse aynı yazdım. Bu yüzden, bir sürü ek komut yüklemek yerine tek bir özel komut tercih ederseniz, bu git-prdosyayı içinde bir yere yerleştirin $PATHve şunu yazabilirsiniz:

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

4

Bir çatal oluşturduğunuz ve uzak yukarı akış deposunu eklediğiniz "github çatal" iş akışını takip ediyorsanız:

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)

mevcut şubenize çekmek için komutunuz şöyle görünecektir:

git pull upstream pull/<pull_request_number>/head

yeni bir şubeye girmek için kod şöyle görünecektir:

git fetch upstream pull/<pull_request_number>/head:newbranch

3

Github kısa süre önce github-cli adlı bir cli programı yayınladı . Yükledikten sonra, çekme isteğinin dalını kimliğini kullanarak yerel olarak kontrol edebilirsiniz.

Örneğin: gh pr checkout 2267

Bu paketin hala beta aşamasında olduğunu unutmayın


1

Uzak PR şubesini yerel şubeye alın:

git fetch origin ‘remote_branch’:‘local_branch_name’

Yerel şubenin yukarı akışını uzak şubeye ayarlayın.

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

Yerel değişiklikleri PR şubesine tekrar göndermek istediğinizde

git push origin HEAD:remote_PR_Branch_name


0

Kökeninizin ve yukarı akış bilgilerinizin aşağıdaki gibi olduğunu varsayalım

   $ git remote -v
   origin  git@github.com:<yourname>/<repo_name>.git (fetch)
   origin  git@github.com:<yourname>/<repo_name>.git (push)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

ve şube adınız şöyle

   <repo_owner>:<BranchName>

sonra

   git pull origin <BranchName>

işi yapacak


Kodu paylaştığınızda, lütfen kodunuzu açıklamaya çalışın
Yunus Temurlenk

-3

Taahhütleri çatallı repolarının ana dalındaysa, aşağıdakileri yapabilirsiniz.

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
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.