Cara membuka beberapa permintaan tarik di GitHub

143

Saat saya membuka permintaan tarik di GitHub .
Semua komit sejak permintaan terakhir saya dan semua yang baru secara otomatis ditambahkan ke permintaan ini .

Saya tidak bisa mengontrol komit mana yang ditambahkan dan mana yang tidak.
Ketika saya mencoba membuka permintaan penarikan lainnya, saya mendapatkan pesan kesalahan "Ups! Sudah ada permintaan penarikan".

Apakah ada cara mudah untuk membuka beberapa permintaan tarik tanpa harus dipusingkan dengan baris perintah?

torourke
sumber

Jawaban:

119

Permintaan tarik didasarkan pada cabang.
Satu-satunya cara untuk membuka permintaan pull untuk beberapa komit adalah:

  1. Pisahkan mereka menjadi cabang mereka sendiri .
  2. Buka permintaan tarik dari sana.
mipadi
sumber
3
Ok itu keren, saya pikir itu hanya dengan master. Jadi yang Anda maksud adalah saya dapat membuat banyak cabang (yaitu: fitur aliran git) dan membuat permintaan tarik untuk masing-masing ... Ayo coba!
Ziyan Junaideen
9
Saya baru saja menemukan bahwa branch mempertahankan riwayat dari commit sebelumnya, jadi pull request terhadap upstream masih menyertakan semua commit.
belut ghEEz
2
Hai @ eel-gheez, apakah Anda sudah mengetahui apa yang harus dilakukan? Bagaimana cara membuat PR terisolasi tanpa perubahan dari cabang lain yang ditampilkan?
Jonathan Cross
3
Ini tidak menyelesaikan masalah: Ketika saya mencoba membuat PR, kedua cabang (dengan setidaknya satu komit masing-masing) dibandingkan. Apa yang saya lakukan salah?
MERose
1
@eelghEEz Anda harus membuat cabang baru, git cherry-pick semua komit yang Anda inginkan ke cabang ini dan kemudian buat permintaan tarik dari cabang ini. Ini adalah fitur desain yang sangat penting dari git yang setiap komit bergantung pada komit sebelumnya, dan komit di git seharusnya tidak hanya sebagai tambalan, tetapi sebagai tambalan yang mengetahui tambalan apa yang diterapkan sebelum ini. Jadi inilah mengapa seseorang harus membuat cabang baru dengan komit baru, yang perbedaannya mungkin masih sama, tetapi yang tautannya ke komit sebelumnya berbeda.
MD
11

Cara termudah yang saya temukan untuk melakukan ini adalah dengan perintah hub ( https://github.com/defunkt/hub ).

Dari cabang topik Anda ("fitur" dalam contoh ini) yang Anda inginkan untuk membuat permintaan tarik, Anda dapat menjalankan:

git pull-request

(ingatlah untuk mendorong cabang Anda dulu!)

Dan itu akan membuka permintaan tarik baru di GitHub untuk "YOUR_USER: feature".

Jika Anda telah membuat masalah di GitHub, Anda bahkan dapat melampirkan permintaan tarik ke masalah yang ada (sesuatu yang tidak dapat Anda lakukan dari UI web):

$ git pull-request -i 123
[ attached pull request to issue #123 ]
Tyler Rick
sumber
3

Anda dapat membuat Permintaan Tarik (PR), dengan membuat cabang terpisah untuk pekerjaan Anda.

Contoh:

  1. Anda melakukan pembayaran dari master cabang ke pekerjaan cabang-1.

  2. Anda membuat beberapa komit di pekerjaan cabang-1 sebagai work-1-commit-1 dan work-1-commit-2

  3. Sekarang Anda membuat PR dari pekerjaan-1 hingga master. Kode Anda dapat ditinjau dengan melihat file diubah dari PR.

  4. Sekarang, untuk pekerjaan lebih lanjut Anda akan melakukan checkout dari pekerjaan cabang-1 ke pekerjaan cabang baru-2

  5. Anda membuat beberapa komit di pekerjaan cabang-2 sebagai work-2-commit-1 dan work-2-commit-2

  6. Sekarang Anda membuat PR dari pekerjaan-2 ke pekerjaan-1. Kode Anda dapat ditinjau dengan melihat file diubah dari PR.

Di sini perubahan file hanya akan memiliki kode baru yang Anda tulis setelah work-1-commit-2.

Tushar Mittal
sumber
1

Anda sebenarnya BISA melakukan ini tanpa membuat cabang lain, tetapi ini membutuhkan sedikit bermain-main.
Berikut langkah-langkahnya:

  1. Identifikasi dua rentang komit yang ingin Anda tarik. Inilah yang akan saya gunakan sebagai contoh:
    (other / master) A -> B -> C -> D -> E (your / master)
    Katakanlah Anda ingin menarik B dan C dalam satu permintaan, dan D & E di tempat lain.
  2. Buat permintaan tarik. Minta sisi kiri ("Base") menjadi komit A. Untuk sisi kanan ("kepala"), ketik nomor komit C.
  3. Tulis deskripsi untuk permintaan pertama Anda.
  4. Buat permintaan lain. Untuk basis, ketik nomor komit C, dan untuk kepala, masukkan E (milik Anda / master).
  5. Tulis deskripsinya.

Seperti yang saya lihat, permintaan tarik melihat komit C sebagai titik cabang. Atau sesuatu.

Bersepeda
sumber
Anda harus membiarkan orang lain / master sebagai sisi kiri meskipun Anda menambahkan nomor komit dari Anda / master. Juga metode ini tidak memungkinkan Anda untuk menambahkan komit baru ke permintaan penggabungan, jika diperlukan beberapa perubahan lagi.
frisco
Saya memposting tindak lanjut untuk jawaban ini, berbeda dengan beberapa info di Github, lihat stackoverflow.com/questions/23159860
Mark Bennett
Saya dapat melihat ini akan membuat dua PR yang terlihat benar, yang masing-masing berisi komit yang diinginkan. Tapi, untuk lebih jelasnya, apakah itu melakukan hal yang benar ketika mereka digabungkan? Seperti di, saya dapat melihat bahwa PR pertama akan menggabungkan B & C dengan benar ke / master lain. Tetapi ketika PR ke-2 bergabung, bagaimana cara mengetahui cabang mana yang akan digabungkan? (Karena dibuat pada commit 'C', bukan di / master lain) Apakah penting urutan PR digabungkan? (mungkin begitu)
Jonathan Hartley
1

Saat Anda pertama kali membuat permintaan tarik, jika Anda membuka dua formulir terpisah untuk permintaan tarik baru, ini akan memungkinkan Anda untuk membuatnya selama mereka menunjuk ke cabang yang berbeda untuk digabungkan. Misalnya, saya dapat membuat dua Permintaan terpisah, satu untuk digabungkan menjadi master dan satu lagi untuk digabungkan ke dalam pengujian.

BeanyTheSane
sumber
1

Saya baru mengenal Git dan GitHub dan memiliki pertanyaan yang sama dengan OP.

Saya telah menemukan solusi, yang mungkin tidak tersedia pada saat OP.

Situasi: Anda memiliki 3 perubahan, dan Anda ingin masing-masing dibuat dari sebelumnya, dan masing-masing memiliki pull request (PR) sendiri.

Masalah: Saat Anda membuat PR pertama yang mencoba menarik develop menjadi master, semuanya terlihat baik-baik saja, tetapi kemudian setelah Anda membuat perubahan untuk PR kedua, dan menggabungkannya (menggunakan cabang yang sama) semua perubahan ada di PR yang sama .

Solusi Mini: Buat cabang baru

git branch mini_change_2
git checkout mini_change_2

Sekarang Anda mendorong kode ke GitHub dan membuat PR, tetapi defaultnya adalah Tarik dari mini_change_2 ke master, kecuali master belum memiliki perubahan dari PR pertama, jadi ini mencakup semua perubahan dari PR1 dan PR2.

Solusi Terbaik: Tentukan cabang mana yang Anda gabungkan di PR2.

Jangan hanya menerima default saat membuat PR kedua, katakanlah Anda akan menarik mini_chnage_2 ke Develop, ini hanya akan menampilkan perubahan di mini_change_2

Sekarang buat mini_change_3 cabang baru dan PR itu ke mini_change_3.

Masalahnya muncul begitu Anda mulai menggabungkannya ... tapi itu latihan yang berbeda.

markwusinich
sumber