Bagaimana saya bisa memeriksa permintaan tarik GitHub dengan git?


251

Saya ingin memeriksa permintaan tarik yang dibuat sebelumnya (dibuat melalui antarmuka web GitHub). Saya mencari dan menemukan tempat yang berbeda di mana ref / pull atau ref / pull / pr

Tetapi ketika saya menambah fetch = +refs/pull/*/head:refs/remotes/origin/pr/*file konfigurasi git dan melakukan git fetch

Apa yang saya lakukan salah? Haruskah GitHub membuat barang tarikan / xyz secara otomatis, atau apakah saya harus mengkonfigurasi sesuatu?


Seperti apa bagian remote lengkap file konfigurasi Anda?



Saya akhirnya pada pertanyaan ini, tetapi saya benar-benar membutuhkan stackoverflow.com/q/1783405/2413303
EpicPandaForce

1
Paragraf kedua bukan kalimat lengkap. "Tetapi ketika saya menambahkan ... dan melakukan git mengambil" - ketika Anda melakukan hal-hal ini apa yang terjadi?
cp.engr

Jawaban:


385

Untuk mengambil PR jarak jauh ke repo lokal Anda,

git fetch origin pull/ID/head:BRANCHNAME

di mana IDid permintaan tarik dan BRANCHNAMEadalah nama cabang baru yang ingin Anda buat. Setelah Anda membuat cabang, maka cukup

git checkout BRANCHNAME

Lihat dokumentasi resmi GitHub untuk informasi lebih lanjut.


11
Saya menggunakan ini untuk mengambil pr dari repo hulu ke repo bercabang lokal saya, Anda dapat mengganti asal dengan hulu juga.
Jngai1297

18
Perintah saya akhirnya terlihat seperti git fetch origin pull/1/head:githubusername, bukan apa yang saya harapkan
Anthony

1
bagaimana cara mengembalikan?
fico7489

8
@Antoine BRANCHNAMEadalah apa pun yang Anda ingin beri nama cabang. Saya kira Anda mencoba menggunakan nama yang sudah ada (mis. master) Dan itu tidak berhasil, jadi Anda mencoba nama pengguna Anda, yang berhasil, karena mereka bukan cabang dengan nama itu. Mungkin saya salah mengerti apa yang Anda katakan.
Nateowami

1
Mungkin Anda mengkonfigurasi repo lokal Anda dengan cara yang originmenunjuk ke garpu dan upstream- ke repositori asli (mengikuti help.github.com/articles/configuring-a-remote-for-a-fork , misalnya). Pastikan untuk mengubah originke upstreamdalam perintah yang disebutkan, jika Anda ingin mengambil permintaan tarik dari repo asli.
mvlabat

126

Ini akan diambil tanpa Anda harus memberi nama cabang:

git pull origin pull/939/head

Bagaimana cara saya mendapatkan permintaan tarikan khusus pada mesin saya?


Ini memang cukup, tks
rll

Yang ini bekerja untuk saya, metode mengambil timbo melakukan sesuatu tetapi bukan hal yang benar
malhal

30
Perhatikan bahwa jika Anda melakukan ini sementara di cabang master Anda, misalnya, itu akan melakukan langsung ke cabang ini. Jika Anda ingin membawa permintaan tarik ke cabang terpisah untuk pementasan, coba jawaban @ timbo.
phoenix

3
Lakukan apa yang dikatakan @ phoenix. Saya ingin cabang permintaan tarik digandakan pada mesin saya di bawah cabangnya sendiri, bukan master.
Paul Chernoch

Ini juga berfungsi jika nanti Anda ingin menarik perubahan dari permintaan tarik ke cabang lokal Anda.
luator

52

Intisari itu menggambarkan apa yang terjadi ketika Anda mengambil git:

Jelas, ubah url github agar cocok dengan URL proyek Anda. Itu akhirnya tampak seperti ini:

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

Sekarang ambil semua permintaan tarik:

$ 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
...

Untuk memeriksa permintaan tarik tertentu:

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

Anda memiliki berbagai skrip yang tercantum dalam masalah 259 untuk mengotomatiskan tugas itu.
Proyek git-extras mengusulkan perintah git-pr(diimplementasikan pada PR 262) )

git-pr(1) - Lihat permintaan tarik secara lokal

RINGKASAN

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

DESKRIPSI

Membuat cabang lokal berdasarkan nomor permintaan tarik GitHub, dan beralih ke cabang itu sesudahnya.

Nama remote yang akan diambil. Default keorigin .

CONTOH

Ini memeriksa permintaan tarik 226dari 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

Saya lebih suka mengambil dan checkout tanpa membuat cabang lokal dan berada dalam keadaan terpisah KEPALA . Ini memungkinkan saya untuk dengan cepat memeriksa permintaan tarik tanpa mencemari mesin lokal saya dengan cabang lokal yang tidak perlu.

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

di mana IDID permintaan tarik dan di upstreammana permintaan tarik asli telah dibuat (bisa jadi ituorigin , misalnya).

Saya harap ini membantu.


1
Saya suka solusi ini. Salah satu manfaatnya adalah bahwa jika PR diperbarui dengan lebih banyak komit, maka Anda dapat menjalankan ini lagi dan itu akan menarik komit baru.
Alex Johnson

14

Merujuk jawaban Steven Penny, yang terbaik adalah membuat cabang tes dan menguji PR. Jadi inilah yang akan Anda lakukan.

  1. Buat cabang uji untuk menggabungkan PR ke lokal. Dengan asumsi Anda berada di cabang utama:

git checkout -b test

  1. Dapatkan perubahan PR ke cabang tes

git pull origin pull/939/head:test

Sekarang, Anda dapat dengan aman menguji perubahan pada cabang uji lokal ini (dalam hal ini, tes bernama ) dan setelah Anda puas, dapat menggabungkannya seperti biasa dari GitHub.


1
Saya akan membuat yang lebih baik lagi - saya akan membuat worktree, mengaturnya ke testcabang baru dan MAKA menarik PR - dengan cara itu saya tidak perlu memulihkan cabang secara lokal ketika selesai; Saya hanya membuang meja kerja. Bahkan saya TIDAK PERNAH checkout -blagi - saya selalu membuat worktree dan kemudian cabang. Disk itu murah. Tentu saja, saya memiliki skrip yang melakukan ini; Saya tidak mengetik semua perintah yang diperlukan secara individual.
mpersico

11

Jika Anda menggunakan Github.com, buka "Tarik permintaan", klik pada permintaan tarik yang relevan, lalu klik tautan "instruksi baris perintah": instruksi baris perintah di Github.com


Katakanlah, apakah sebenarnya ada cara - ketika Anda melihat github.com yang saya maksud - untuk mengunduh file yang baru / diubah, dari PR? Jadi, ketika Anda melihat repo di github, Anda dapat mengklik tombol "unduh sebagai zip" yang praktis, atau memang, Anda dapat, cukup sederhana, mengklik dan hanya melihat pada setiap (seluruh) file proyek. Untuk PR, saya tidak bisa melihat bagaimana caranya, cukup, klik untuk "melihat file" - tahu apa yang saya maksud? Apakah saya melewatkan sesuatu? Bersulang!
Fattie

9

Anda dapat menggunakan git configperintah untuk menulis aturan baru .git/configuntuk mengambil permintaan tarik dari repositori:

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

Dan kemudian:

$ 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

Masalah dengan beberapa opsi di atas, adalah bahwa jika seseorang mendorong lebih banyak komitmen ke PR setelah membuka PR, mereka tidak akan memberi Anda versi terbaru. Bagi saya yang paling berhasil adalah - buka PR, dan tekan 'Komit', gulir ke bawah untuk melihat hash komit terbaru masukkan deskripsi gambar di sini dan kemudian cukup gunakan git checkout, yaitu

git checkout <commit number>

dalam contoh di atas

git checkout 0ba1a50


2
Saya memukul persis masalah ini dengan git fetch origin pull/ID/head:BRANCHNAMEpendekatan yang disebutkan di stackoverflow.com/a/30584951/659732 . Terima kasih atas solusinya!
joewiz


5

Untuk Bitbucket, Anda perlu mengganti kata pullmenjadipull-requests .

Pertama, Anda dapat mengonfirmasi gaya tarik URL permintaan dengan git ls-remote originperintah.

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

Seperti yang Anda lihat, itu refs/pull-requests/1503/frombukanrefs/pull/1503/from

Kemudian Anda dapat menggunakan perintah dari salah satu jawaban.


4

Saya akhirnya menulis hampir sama dengan yang disediakan oleh git-extras. Jadi jika Anda lebih suka satu perintah khusus daripada menginstal banyak perintah tambahan lainnya, cukup tempatkan file inigit-pr di suatu tempat di Anda $PATHdan kemudian Anda bisa menulis:

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

4

Jika Anda mengikuti alur kerja "github fork", tempat Anda membuat fork dan menambahkan repo hulu jarak jauh:

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)

untuk menarik ke cabang Anda saat ini perintah Anda akan terlihat seperti:

git pull upstream pull/<pull_request_number>/head

untuk menarik ke cabang baru kode akan terlihat seperti:

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

3

Github baru-baru ini merilis utilitas cli bernama github-cli . Setelah menginstalnya, Anda dapat checkout cabang permintaan tarik secara lokal dengan menggunakan id

misalnya: gh pr checkout 2267

Perhatikan bahwa paket ini masih dalam versi beta


1

Dapatkan cabang PR jarak jauh ke cabang lokal:

git fetch origin ‘remote_branch’:‘local_branch_name’

Atur hulu dari cabang lokal ke cabang jarak jauh.

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

Saat Anda ingin mendorong perubahan lokal ke cabang PR lagi

git push origin HEAD:remote_PR_Branch_name


0

Misalkan asal Anda dan info hulu seperti di bawah ini

   $ 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)

dan nama cabang Anda seperti

   <repo_owner>:<BranchName>

kemudian

   git pull origin <BranchName>

akan melakukan pekerjaan


Saat Anda membagikan kode, coba jelaskan kode Anda
Yunus Temurlenk

-2

Jika komit mereka ada di sana cabang master repo bercabang mereka, maka Anda bisa melakukan hal berikut.

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.