Cara melakukan permintaan tarik GitHub

283

Bagaimana cara membuat dan / atau mengirim permintaan tarik ke repositori lain yang dihosting di GitHub?

tim peterson
sumber
2
Bukankah ini cukup dijelaskan di halaman bantuan GitHub ?
lanzz
27
@lanzz Tidak, halaman bantuan tidak menyertakan beberapa tips berguna, yang saya harap saya tahu sebelum melakukan permintaan tarik pertama saya (lihat di bawah).
VonC
9
@ianzz tentu saja halaman Github "cukup", tetapi ada banyak cara untuk belajar. Apa yang saya coba lakukan adalah membuat tutorial tingkat pemula. Apa yang saya temukan kurang dalam penjelasan Github adalah bahwa: 1) tidak terkandung dalam satu sumber (dua halaman yang tidak terkait jelas), 2) tidak ringkas (halaman-halaman itu sangat panjang, panjang = luar biasa), 3) adalah tidak dijelaskan dalam istilah manusia di bagian utama. Dalam mengajar, selalu sulit bagi guru yang lebih berpengalaman untuk mengetahui apa yang tidak diketahui pemula. Menempatkan diri pada posisi pemula adalah tujuan saya dalam menulis ini.
tim peterson
12
Panjang bisa berarti berlebihan yang bisa berarti batalkan = tidak belajar. Seseorang dapat "akhirnya memahami proses yang terlibat" melalui banyak jalan yang jelas bukan salah satunya. Untuk mengakhiri perang api, tidak perlu menjawab, saya mengerti dari mana Anda berasal.
tim peterson
8
Anda membuat permintaan tarik dari garpu Anda sendiri. Itu jelas bukan asumsi awal saya.
Derek Illchuk

Jawaban:

236

(Sebagai tambahan dari halaman resmi " Bantuan GitHub 'Menggunakan permintaan tarik' ",
lihat juga " Memalsukan vs. Bercabang di GitHub ", " Apa perbedaan antara asal dan hulu di GitHub ")

Kiat pasangan tentang permintaan tarik:

Dengan asumsi bahwa Anda telah terlebih dahulu membuat repo , inilah yang harus Anda lakukan dalam garpu yang Anda miliki:

  • buat cabang : mengisolasi modifikasi Anda di cabang. Jangan buat permintaan tarik dari mastermana Anda bisa tergoda untuk menumpuk dan mencampur beberapa modifikasi sekaligus.
  • rebase cabang itu : bahkan jika Anda sudah melakukan permintaan tarik dari cabang itu, rebasing di atasorigin/master (memastikan tambalan Anda masih berfungsi) akan memperbarui permintaan tarik secara otomatis (tidak perlu mengklik apa pun)
  • perbarui cabang itu : jika permintaan tarik Anda ditolak, Anda bisa menambahkan komit baru, dan / atau mengulangi riwayat Anda sepenuhnya: itu akan mengaktifkan permintaan tarik yang ada lagi.
  • "fokus" cabang itu : yaitu, buat topiknya "kencang", jangan modifikasi ribuan kelas dan semua aplikasi, hanya menambah atau memperbaiki fitur yang terdefinisi dengan baik, menjaga perubahan kecil .
  • hapus cabang itu : begitu diterima, Anda bisa menghapus cabang itu dengan aman di fork Anda (dan git remote prune origin). GitHub GUI akan mengusulkan agar Anda menghapus cabang Anda di halaman permintaan tarik Anda.

Catatan: untuk menulis Permintaan Tarik itu sendiri, lihat " Cara menulis permintaan tarik sempurna " (Januari 2015, GitHub)


Maret 2016: Opsi tombol penggabungan PR baru: lihat " squash Github melakukan dari antarmuka web atas permintaan tarik setelah komentar ulasan? ".

labu

Pemelihara repo dapat memilih untuk merge --squashkomitmen PR tersebut.


Setelah Permintaan Tarik

Mengenai poin terakhir, sejak 10 April 2013, " tombol gabung didesain ulang ", cabang dihapus untuk Anda:

tombol penggabungan baru

Menghapus cabang setelah Anda bergabung juga telah disederhanakan.
Alih-alih mengonfirmasi penghapusan dengan langkah tambahan, kami segera menghapus cabang saat Anda menghapusnya dan memberikan tautan yang nyaman untuk memulihkan cabang jika Anda membutuhkannya lagi .

Itu mengonfirmasi praktik terbaik menghapus cabang setelah menggabungkan permintaan tarik.


pull-request vs request-pull

  • permintaan tarik bukan istilah "git" resmi.
    Git menggunakan perintah request-pull(!)
    Untuk membangun permintaan penggabungan:
    Ini "merangkum perubahan antara dua commit ke output standar, dan menyertakan URL yang diberikan dalam ringkasan yang dihasilkan."
    Github meluncurkan versi sendiri sejak hari pertama (Februari 2008) , tetapi mendesain ulang fitur itu pada Mei 2010 , menyatakan bahwa:

    Pull Request = Compare View + Issues + Commit comments
    

e-note untuk "reposotory" (sic)

<humour>

Itu (permintaan tarik) bahkan tidak didefinisikan dengan benar oleh GitHub!

Untungnya, organisasi berita bisnis sejati akan tahu, dan ada e-note untuk mengganti tarikan-ganti dengan 'e-note' :

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

Jadi jika repos Anda o tory membutuhkan e-catatan ... meminta Fox Business . Mereka tahu.

</humour>

VONC
sumber
2
- @ VonC terima kasih untuk ini. Maukah Anda memberikan beberapa kode untuk menunjukkan bagaimana apa yang Anda katakan berbeda dari apa yang saya katakan? The branchvs masterkeputusan tampaknya seperti satu penting untuk mengambil / jawaban Github ini saya dari solusi teoritis untuk sesuatu yang satu benar-benar akan digunakan.
tim peterson
1
@timpeterson fakta bahwa Anda dapat sepenuhnya mengubah riwayat di dalam cabang itu, dan itu akan memperbarui permintaan tarikan secara otomatis, adalah kunci di sini: karena permintaan tarikan harus dilakukan pada yang terbaru dari proyek hulu. Jika repo hulu itu memiliki komitmen baru, Anda harus rebase cabang Anda di atasnya (mengubah sejarah cabang itu), dan mendorongnya kembali ke garpu Anda: yang akan memperbarui permintaan tarik Anda (berdasarkan cabang yang sama) secara otomatis.
VonC
4
Saya tidak mengerti bagian rebasing. Apa fungsinya? ( halaman ini membuatnya terdengar seperti ilmu roket tapi saya yakin bukan). Perintah apa yang akan Anda keluarkan pada saat itu "rebases"?
Camilo Martin
1
@ CamiloMartin jika Anda berada di cabang PR Anda, maka git pull --rebase upstream/mastermemang baik-baik saja.
VonC
1
@vikramvi master adalah cabang yang sama dengan repo asli yang telah Anda forked. Cabang itu harus selalu mencerminkan repo asli. Anda mengisolasi perbaikan Anda di cabang untuk PR Anda. Anda menggunakan master hanya sebagai cara untuk mengetahui apa yang ada di repo asli (dan untuk rebase cabang fix Anda di atasnya, untuk memastikan penggabungan permintaan-tarik yang mudah)
VonC
202

Untuk mempelajari cara membuat permintaan tarik, saya hanya mengikuti dua halaman bantuan terpisah di Github (ditautkan di bawah ini sebagai poin-poin). Perintah baris perintah berikut adalah untuk Bagian 1 . Bagian 2 , permintaan tarik yang sebenarnya, dilakukan sepenuhnya di situs web Github.

$ 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
  • Bagian 1 : garpu repo seseorang: https://help.github.com/articles/fork-a-repo

    1. klik tombol 'garpu' pada repo yang ingin Anda berkontribusi, dalam hal ini: repo PHP Dwolla Dwolla (Dwolla / dwolla-php)
    2. dapatkan URL untuk garpu yang baru Anda buat, dalam hal ini: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. ketik git clone->cd dwolla-php->git remote->git fetchurutan di atas untuk mengkloning garpu Anda di suatu tempat di komputer Anda (yaitu, "salin / tempel" ke, dalam kasus ini:third_party TimPeterson$ :) dan sinkronkan dengan master repo (Dwolla / dwolla-php)
    4. lakukan perubahan pada repo lokal Anda
    5. ketik git add->git commit->git pushurutan di atas untuk mendorong perubahan Anda ke repo jarak jauh, yaitu, garpu Anda di Github (tim-peterson / dwolla-php)
  • Bagian 2 : buat permintaan-tarik: https://help.github.com/articles/using-pull-requests

    1. buka halaman web garpu Anda di Github ( https://github.com/tim-peterson/dwolla-php )
    2. klik tombol 'tarik-permintaan'
    3. berikan nama permintaan-tarik, isi perincian tentang perubahan apa yang Anda buat, klik tombol kirim.
    4. kamu sudah selesai!!
tim peterson
sumber
4
- @ alexgray, saya meninggalkan prompt bash, misalnya, Tims-MacBook-Pro:third_party TimPeterson$karena ini adalah tutorial pemula dan prompt tersebut membantu mengarahkan pengguna.
tim peterson
1
Iya. Terima kasih. Contoh yang bisa saya ikuti. Mengapa Anda tidak memiliki hub git itu?
Sevenearths
Setelah itu git fetch upstream, bukankah Anda perlu menggabungkan perubahan hulu dengan salinan lokal Anda, menggunakan git checkout masteritu git merge upstream/master?
Sparhawk
@Sparhawk Tidak, Anda tidak perlu menggabungkan perubahan Anda menjadi master yang berada di garpu Anda. Permintaan tarik ke repo lain hanya dapat didasarkan dari cabang. Namun, biasanya akan menjadi praktik yang baik bagi Anda untuk juga memperbarui master garpu Anda saat Anda pergi, sehingga perubahan pada repo "nyata" dan sering dibawa kembali dalam loop dalam repo bercabang Anda.
ely
1
@ HimanshuShekhar ya tapi Anda harus menggunakan aplikasi desktop github atau API mereka. Browser lebih mudah bagi saya.
tim peterson
70

Untuk membuat permintaan tarik, Anda perlu melakukan langkah-langkah berikut:

  1. Fork repositori (yang ingin Anda tarik permintaannya). Cukup klik tombol garpu halaman repositori dan Anda akan memiliki repositori github terpisah yang didahului dengan nama pengguna github Anda.
  2. Kloning repositori ke mesin lokal Anda. Perangkat lunak Github yang Anda instal pada mesin lokal Anda dapat melakukan ini untuk Anda. Klik tombol klon di sebelah nama repositori.
  3. Buat perubahan / komitmen lokal pada file
  4. sinkronkan perubahan
  5. buka repositori bercabang github Anda dan klik tombol hijau "Bandingkan & Tinjau" di samping tombol cabang. (Tombol memiliki ikon - tanpa teks)
  6. Halaman baru akan terbuka menampilkan perubahan Anda dan kemudian klik tautan tarik permintaan, yang akan mengirim permintaan ke pemilik asli repositori yang Anda bercabang dua.

Butuh beberapa saat untuk memikirkan hal ini, semoga ini bisa membantu seseorang.

Farhan
sumber
3
Tidak jelas bagi saya bahwa Anda perlu garpu repo sebelum dapat melakukan permintaan tarik. Saya pikir komit yang didorong hanya akan pergi ke semacam cabang yang tertunda yang memiliki akses tulis publik dan kemudian bergabung dari sana. Terima kasih!
Chris Arena
16

Saya telah memulai sebuah proyek untuk membantu orang-orang membuat permintaan tarik GitHub pertama mereka. Anda dapat melakukan tutorial praktis untuk membuat PR pertama di sini

Alur kerjanya sederhana seperti

  • Garpu repo di github
  • Dapatkan url klon dengan mengklik tombol clone repo
  • Pergi ke terminal dan jalankan git clone <clone url you copied earlier>
  • Buat cabang untuk perubahan yang Anda lakukan git checkout -b branch-name
  • Buat perubahan yang diperlukan
  • Komit perubahan Anda git commit
  • Dorong perubahan Anda ke fork Anda di GitHub git push origin branch-name
  • Buka garpu Anda di GitHub untuk melihat Compare and pull requesttombol
  • Klik di atasnya dan berikan detail yang diperlukan
sudo bangbang
sumber
15

Bagi kita yang memiliki akun github.com, tetapi hanya mendapatkan pesan kesalahan yang tidak menyenangkan ketika kita mengetikkan "git" ke dalam command-line, inilah cara melakukannya di browser Anda :)

  1. Sama seperti yang ditulis Tim dan Farhan: Garpu salinan proyek Anda sendiri: Langkah 1: Garpu
  2. Setelah beberapa detik, Anda akan diarahkan ke salinan proyek bercabang sendiri: Langkah 2
  3. Arahkan ke file yang perlu Anda ubah dan klik "Edit file ini" di toolbar: Langkah 3: Edit file
  4. Setelah mengedit, tulis beberapa kata yang menjelaskan perubahan dan kemudian "Komit perubahan", juga ke cabang master (karena ini hanya salinan Anda sendiri dan bukan proyek "utama"). Langkah 4: Mengkomit perubahan
  5. Ulangi langkah 3 dan 4 untuk semua file yang perlu Anda edit, dan kemudian kembali ke akar salinan proyek Anda. Di sana, klik tombol hijau "Bandingkan, tinjau ...": Langkah 5: Mulai kirim
  6. Terakhir, klik "Buat permintaan tarik" ..dan kemudian "Buat permintaan tarik" lagi setelah Anda memeriksa ulang tajuk dan deskripsi permintaan Anda: masukkan deskripsi gambar di sini
Sphinxxx
sumber
3

Saya mengikuti instruksi tim peterson tetapi saya membuat cabang lokal untuk perubahan saya. Namun, setelah mendorong saya tidak melihat cabang baru di GitHub. Solusinya adalah menambahkan -u ke perintah push:

git push -u origin <branch>
tamalet
sumber
apakah Anda memperhatikan 2 nama pengguna di url di atas? yang pertama adalah tim-petersonyang kedua adalahDwolla
tim peterson
3
Juga, ini lebih baik sebagai komentar untuk jawaban saya. Anda mungkin mendapatkan beberapa downvotes.
tim peterson
1

Saya menulis program bash yang melakukan semua pekerjaan mendirikan cabang PR untuk Anda. Ia melakukan forking jika diperlukan, menyinkronkan dengan upstream, mengatur remote upstream, dll. Dan Anda hanya perlu melakukan modifikasi Anda, tekan dan kirimkan PR.

Inilah cara Anda menjalankannya:

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

Anda akan menemukan program di sini dan repositori juga menyertakan panduan langkah demi langkah untuk melakukan proses yang sama secara manual jika Anda ingin memahami cara kerjanya, dan juga informasi tambahan tentang cara menjaga fitur cabang Anda tetap up-to- berkencan dengan master hulu dan informasi berguna lainnya.

Stason
sumber
0

The sederhana GitHub Tarik Permintaan adalah dari antarmuka web tanpa menggunakan git.

  1. Daftarkan akun GitHub, masuk lalu buka halaman di repositori yang ingin Anda ubah.
  2. Klik ikon pensil ,

    cari teks di dekat lokasi, lakukan pengeditan yang Anda inginkan kemudian pratinjau untuk mengonfirmasi. Berikan deskripsi perubahan yang diajukan hingga 50 karakter dan opsional deskripsi yang diperluas, lalu klik tombol Ubah file yang diajukan .

  3. Jika Anda membaca ini, Anda tidak akan memiliki akses tulis ke repositori (folder proyek) sehingga GitHub akan membuat salinan repositori (sebenarnya cabang) di akun Anda. Klik tombol Buat permintaan tarik .

  4. Berikan deskripsi Permintaan Tarik dan tambahkan komentar lalu klik tombol Buat permintaan tarik .
flywire
sumber