Gabungkan permintaan tarik ke cabang yang berbeda dari default, di Github

122

Permintaan tarik masuk ke repo saya yang dihosting di Github. Secara default, ini digabungkan ke dalam mastercabang.

Apakah ada cara bagi saya untuk mengubah cabang tempat perubahan akan digabungkan?

eoinoc.dll
sumber

Jawaban:

86

Mulai 15.08.2016 GitHub memungkinkan mengubah cabang target dari permintaan penarikan melalui GUI. Klik di Editsamping judul, lalu pilih cabang dari menu drop-down.

tangkapan layar

Anda sekarang dapat mengubah cabang dasar dari permintaan tarik terbuka. Setelah Anda membuat permintaan tarik, Anda dapat memodifikasi cabang dasar sehingga perubahan dalam permintaan tarik dibandingkan dengan cabang yang berbeda. Dengan mengubah cabang dasar dari permintaan penarikan asli Anda daripada membuka yang baru dengan cabang dasar yang benar, Anda akan dapat menyimpan pekerjaan dan diskusi yang berharga.

maliaya
sumber
1
Ini harus menjadi jawaban yang tepat untuk pertanyaan ini (setelah upgrade ke GitHub yaitu).
stuxnetting
Fitur ini sepertinya sudah tidak ada lagi (per 2018-02-15), bukan? Dalam permintaan tarik baru-baru ini, cabang target ditampilkan dengan font biru yang sama dengan latar belakang biru muda sebagai repositori / cabang sumber dan bukan tombol lagi.
cgogolin
12
Ah! Memang! Yang pertama harus mengklik "Edit" (yang tidak jelas dari gambar di atas). Saya mengabaikan ini. Maaf.
cgogolin
@cgogolin Terima kasih telah menunjukkan hal itu - Saya juga bingung, sampai saya membaca komentar Anda dan mengklik tombol Edit.
mhucka
Github memperingatkan bahwa "Ketika Anda mengubah cabang dasar dari permintaan penarikan Anda, beberapa komit dapat dihapus dari garis waktu." dan "Beberapa komit dari cabang dasar lama mungkin dihapus dari garis waktu." Tahu apa artinya ini?
Matthias Fripp
55

Pengirim dapat mengubahnya ketika mereka mengeluarkan permintaan penarikan, tetapi setelah mereka mengeluarkannya, Anda tidak dapat mengubahnya.

Di sisi lain, Anda dapat menggabungkan cabang dan push secara manual, yang saya lakukan secara semi-rutin untuk permintaan tarik yang salah sasaran.

Anda mungkin menemukan hubpermata itu membantu dalam bekerja dengan komponen permintaan tarik.

Permata itu membungkus proses manual, yaitu:

  1. Tambahkan remote untuk percabangan ke checkout lokal Anda.
  2. Ambil remote itu.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...
Daniel Pittman
sumber
1
Jika saya menggabungkan dan mendorong secara manual, apakah Github akan menyadari bahwa permintaan penarikan telah diselesaikan secara efektif? Ada petunjuk tentang cara menggabungkan dari repo terpisah jarak jauh (garpu)?
eoinoc
3
Saya tidak yakin, tetapi tidak secara langsung - karena perubahan tidak bergabung ke cabang target, jadi permintaan penarikan tidak diselesaikan seperti yang ditentukan. Anda harus menutupnya secara manual. Untuk petunjuknya, lihat komentar yang diedit.
Daniel Pittman
Saya akan merekomendasikan menggunakan git merge --no-ff ...seperti yang disebutkan @GuillermoMansilla dalam jawabannya.
jjmontes
3
"Setelah mereka mengeluarkannya, Anda tidak dapat mengubahnya" - Tidak lagi terjadi pada Agustus 2016! Lihat jawaban @maliayas di bawah ini: stackoverflow.com/a/38985999/12484
Jon Schneider
1
Saya mengikuti prosedur ini hari ini (3 Maret 2017). Saya mengunduh permintaan tarik ke cabang lain dan membuat beberapa perbaikan tambahan untuk itu, lalu bergabung menjadi master. Setelah komit dari pull request masuk ke master, GitHub secara otomatis menutup permintaan pull.
Ivan Krivyakov
14

Alternatif untuk menggunakan permata hub yang disebutkan oleh jawaban lain adalah dengan menggunakan baris perintah untuk menggabungkan permintaan penarikan secara lokal , yang memungkinkan Anda untuk melakukan:

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

Perintah di atas hanya berfungsi secara langsung jika Anda menambahkan baris berikut ke .git/configfile Anda terlebih dahulu :

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

Apa yang dilakukannya adalah memungkinkan Anda mengunduh SEMUA permintaan tarik. Karena itu mungkin tidak diinginkan untuk repositori besar, GitHub memodifikasi instruksi untuk menampilkan git fetch origin pull/ID/head:BRANCHNAMEsintaks, yang menghindari modifikasi file konfigurasi dan hanya mengunduh permintaan tarik tunggal itu.

Grzegorz Adam Hankiewicz
sumber
8

Meskipun Anda tidak dapat mengubah permintaan pull yang ada karena itu bukan milik Anda, Anda dapat dengan mudah membuat yang baru jika repositori sumber terkait masih ada - ya, meskipun itu milik orang lain.

Pergi ke repositori pengirim kemudian buat permintaan tarik baru di repositori mereka menggunakan komit yang sama tetapi pastikan Anda menyetel cabang target yang benar dengan benar.

Kemudian kembali ke repositori Anda sendiri dan terima permintaan penarikan baru. Voila!

Deckard
sumber
Apakah ini berfungsi jika mereka telah mengubah repositori mereka? Bagaimana seseorang memastikan bahwa itu "komitmen yang sama?"
ragerdl
@ragerdl - Jika Anda mengembangkan menggunakan model 'feature-per-branch', Anda dapat membuat PR dengan cabang pada cabang upstream, dan itu harus berisi komit yang sama.
geerlingguy
2
Satu-satunya cara untuk melakukannya langsung di GitHub, tanpa akses ke repo lokal.
kopischke
8

Tidak ada yang salah dengan solusi Daniel Pittman, namun saya akan memperlakukan penggabungan tersebut sebagai "no fast forward", yaitu mengubah langkah nomor 3 untuk:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

Dengan menggunakan --no-ff, history akan lebih mudah dibaca. Ini akan dengan jelas mengatakan bahwa $nkomitmen itu berasal $branch, dan itu juga akan membuat hidup Anda lebih mudah jika Anda perlu mengembalikan sesuatu yang dilakukan di cabang itu.

Untuk juga menjawab pertanyaan eoinoc dan memberikan tip tambahan:

Setelah melakukan penggabungan, git cli Anda akan meminta Anda untuk menulis pesan, biasanya pesan umum akan muncul mengatakan sesuatu seperti

Gabungkan cabang pelacakan jarak jauh 'pengguna / cabang mereka' ke dalam cabang Anda

Pastikan untuk mengedit pesan itu dan menyertakan referensi ke nomor permintaan pull. Yaitu: (Dengan asumsi nomor permintaan penarikan adalah 123)

Gabungkan cabang pelacakan jarak jauh 'pengguna / cabang mereka' ke dalam cabang Anda

referensi # 123 memecahkan apa pun ...

Jadi lain kali Anda mengunjungi halaman masalah github / permintaan tarik dan memeriksa permintaan tarik tertentu itu, Anda akan melihat pesan Anda dengan tautan untuk melakukan di mana Anda melakukan penggabungan.

Ini screenshot yang saya maksud.

masukkan deskripsi gambar di sini

Guillermo Mansilla
sumber
6

Untuk melakukan itu pergi ke halaman rumah repositori Anda, klik pada cabang, dan ubah cabang default dari master menjadi sesuatu yang lain, dalam kasus saya "dev".

Setelah itu, setiap kali seseorang membuat permintaan tarik, mergetombol secara otomatis akan menggabungkan permintaan tersebut menjadi "dev" daripada master.

masukkan deskripsi gambar di sini

biara
sumber
terima kasih untuk perbaikan kesalahan ketik @ the Tin Man Saya menghargainya
abbood
4
Tidak perlu berterima kasih kepada kami karena telah menyesuaikan / mengedit. Itu sesuatu yang kami lakukan untuk situs ini. Terus tulis jawaban yang bagus, terima kasih sudah cukup.
the Tin Man