รวมคำขอดึงไปยังสาขาอื่นที่ไม่ใช่ค่าเริ่มต้นใน Github


122

คำขอดึงเข้ามาใน repo ของฉันซึ่งโฮสต์บน Github โดยค่าเริ่มต้นจะรวมเข้ากับmasterสาขา

มีวิธีใดบ้างที่ฉันจะเปลี่ยนสาขาที่จะรวมการเปลี่ยนแปลงเข้าด้วยกัน

คำตอบ:


86

ณ วันที่ 15.08.2016 GitHub อนุญาตให้เปลี่ยนสาขาเป้าหมายของคำขอดึงผ่าน GUI คลิกEditถัดจากชื่อเรื่องจากนั้นเลือกสาขาจากเมนูแบบเลื่อนลง

ภาพหน้าจอ

ตอนนี้คุณสามารถเปลี่ยนสาขาพื้นฐานของคำขอดึงแบบเปิดได้ หลังจากที่คุณสร้างคำขอดึงคุณสามารถปรับเปลี่ยนสาขาพื้นฐานเพื่อให้เปรียบเทียบการเปลี่ยนแปลงในคำขอดึงกับสาขาอื่น ด้วยการเปลี่ยนสาขาพื้นฐานของคำขอดึงเดิมของคุณแทนที่จะเปิดสาขาใหม่ด้วยสาขาฐานที่ถูกต้องคุณจะสามารถเก็บงานและการอภิปรายที่มีคุณค่าไว้ได้


1
นี่ควรเป็นคำตอบที่ถูกต้องสำหรับคำถามนี้ (หลังจากอัปเกรดเป็น GitHub เช่น)
stuxnetting

ฟีเจอร์นี้ดูเหมือนจะไม่มีอีกแล้ว (ณ วันที่ 2018-02-15) ใช่หรือไม่? ในคำขอดึงล่าสุดสาขาเป้าหมายจะแสดงเป็นแบบอักษรสีน้ำเงินเดียวกันบนพื้นหลังสีฟ้าอ่อนเป็นที่เก็บ / สาขาต้นทางและไม่ใช่ปุ่มอีกต่อไป
cgogolin

12
อา! มัน! ก่อนอื่นต้องคลิกที่ "แก้ไข" (ซึ่งไม่ชัดเจนจากภาพหน้าจอด้านบน) ฉันมองข้ามเรื่องนี้ไป ขอโทษ
cgogolin

@cgogolin ขอบคุณที่ชี้ให้เห็น - ฉันก็สับสนเหมือนกันจนกระทั่งฉันอ่านความคิดเห็นของคุณและคลิกที่ปุ่มแก้ไข
mhucka

Github เตือนว่า "เมื่อคุณเปลี่ยนสาขาพื้นฐานของคำขอดึงข้อมูลการคอมมิตบางอย่างอาจถูกลบออกจากไทม์ไลน์" และ "การคอมมิตบางอย่างจากสาขาฐานเดิมอาจถูกลบออกจากไทม์ไลน์" มีความคิดว่านี่หมายถึงอะไร?
Matthias Fripp

55

ผู้ส่งสามารถเปลี่ยนแปลงได้เมื่อพวกเขาส่งคำขอดึง แต่เมื่อพวกเขาออกแล้วคุณจะไม่สามารถเปลี่ยนแปลงได้

ในทางกลับกันคุณสามารถรวมสาขาและพุชด้วยตนเองซึ่งฉันทำกึ่งประจำสำหรับคำขอดึงที่ไม่ตรงเป้าหมาย

คุณอาจพบว่าhubอัญมณีมีประโยชน์ในการทำงานกับส่วนประกอบของคำขอดึง

อัญมณีนั้นสรุปกระบวนการแบบแมนนวลนั่นคือ:

  1. เพิ่มรีโมทสำหรับส้อมในการชำระเงินในพื้นที่ของคุณ
  2. ดึงข้อมูลจากระยะไกลนั้น
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

1
หากฉันรวมและผลักดันด้วยตนเอง Github จะทราบว่าคำขอดึงเสร็จสมบูรณ์แล้วหรือไม่? คำแนะนำใด ๆ เกี่ยวกับวิธีการรวมจาก repo ที่แยกต่างหากจากระยะไกล (ทางแยก)?
eoinoc

3
ฉันไม่แน่ใจ แต่ไม่ใช่โดยตรง - เนื่องจากการเปลี่ยนแปลงไม่ได้รวมเข้ากับสาขาเป้าหมายดังนั้นคำขอดึงจึงไม่เสร็จสมบูรณ์ตามที่กำหนด คุณต้องปิดด้วยตนเอง สำหรับคำแนะนำดูความคิดเห็นที่แก้ไข
Daniel Pittman

ฉันขอแนะนำให้ใช้git merge --no-ff ...ตามที่ @GuillermoMansilla กล่าวถึงในคำตอบของเขา
jjmontes

3
"เมื่อออกแล้วคุณจะไม่สามารถเปลี่ยนแปลงได้" - ไม่มีอีกต่อไปในเดือนสิงหาคม 2559! ดูคำตอบของ @maliayas ด้านล่าง: stackoverflow.com/a/38985999/12484
Jon Schneider

1
ฉันทำตามขั้นตอนนี้ในวันนี้ (3 มีนาคม 2017) ฉันดาวน์โหลดคำขอดึงลงในสาขาอื่นและทำการแก้ไขเพิ่มเติมจากนั้นรวมเข้ากับมาสเตอร์ เมื่อคอมมิตจากคำร้องขอดึงจบลงในมาสเตอร์ GitHub จะปิดคำร้องขอดึงโดยอัตโนมัติ
Ivan Krivyakov

14

อีกทางเลือกหนึ่งในการใช้ฮับเจมที่กล่าวถึงโดยคำตอบอื่น ๆ คือการใช้บรรทัดคำสั่งเพื่อรวมคำร้องขอดึงแบบโลคัลซึ่งช่วยให้คุณทำ:

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

คำสั่งด้านบนจะใช้ได้โดยตรงก็ต่อเมื่อคุณเพิ่มบรรทัดต่อไปนี้ใน.git/configไฟล์ของคุณเป็นครั้งแรก:

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

สิ่งที่ช่วยให้คุณสามารถดาวน์โหลดคำขอดึงทั้งหมด เนื่องจากอาจไม่เป็นที่ต้องการสำหรับ repos ขนาดใหญ่ GitHub จึงปรับเปลี่ยนคำแนะนำเพื่อนำเสนอgit fetch origin pull/ID/head:BRANCHNAMEไวยากรณ์ซึ่งหลีกเลี่ยงการแก้ไขไฟล์การกำหนดค่าและดาวน์โหลดเฉพาะคำขอดึงรายการเดียวเท่านั้น


8

แม้ว่าคุณจะไม่สามารถเปลี่ยนคำขอดึงที่มีอยู่ได้เนื่องจากไม่ใช่ของคุณ แต่คุณสามารถสร้างใหม่ได้อย่างง่ายดายหากที่เก็บซอร์สที่เกี่ยวข้องยังคงมีอยู่ - ใช่แม้ว่าจะเป็นของคนอื่นก็ตาม

ไปที่ที่เก็บของผู้ส่งจากนั้นสร้างคำร้องขอดึงใหม่ในที่เก็บของเขา / เธอโดยใช้คอมมิตเดียวกัน แต่ต้องแน่ใจว่าคุณตั้งค่าสาขาเป้าหมายที่ถูกต้อง

จากนั้นกลับไปที่ที่เก็บของคุณเองและยอมรับคำขอดึงใหม่ Voila!


จะได้ผลหรือไม่หากเปลี่ยนที่เก็บ จะมั่นใจได้อย่างไรว่า "การกระทำเดียวกัน"
ragerdl

@ragerdl - หากคุณกำลังพัฒนาโดยใช้โมเดล 'คุณลักษณะต่อสาขา' คุณสามารถสร้างการประชาสัมพันธ์ที่มีสาขาเทียบกับสาขาต้นน้ำและควรมีข้อผูกพันเดียวกัน
geerlingguy

2
วิธีเดียวที่จะทำได้โดยตรงบน GitHub โดยไม่ต้องเข้าถึง repo ในเครื่อง
kopischke

8

ไม่มีอะไรผิดปกติกับวิธีแก้ปัญหาของ Daniel Pittman อย่างไรก็ตามฉันจะถือว่าการผสานเหล่านั้นเป็น "ไม่กรอไปข้างหน้า" นั่นคือการเปลี่ยนขั้นตอนที่ 3 สำหรับ:

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

โดยการใช้--no-ffประวัติจะง่ายต่อการอ่าน จะบอกอย่างชัดเจนว่าความ$nมุ่งมั่นมาจาก$branchไหนและมันจะทำให้ชีวิตของคุณง่ายขึ้นด้วยหากคุณต้องการคืนค่าบางสิ่งที่ทำในสาขานั้น

หากต้องการตอบคำถามของ eoinoc และให้คำแนะนำเพิ่มเติม:

หลังจากทำการผสานแล้ว git cli ของคุณจะแจ้งให้คุณเขียนข้อความโดยทั่วไปข้อความทั่วไปจะปรากฏขึ้นโดยพูดว่า

รวมสาขาการติดตามระยะไกล 'ผู้ใช้ / สาขาของพวกเขา' เข้ากับสาขาของคุณ

อย่าลืมแก้ไขข้อความนั้นและรวมการอ้างอิงหมายเลขคำขอดึง นั่นคือ: (สมมติว่าหมายเลขคำขอดึงคือ 123)

รวมสาขาการติดตามระยะไกล 'ผู้ใช้ / สาขาของพวกเขา' เข้ากับสาขาของคุณ

refs # 123 แก้อะไรก็ได้ ...

ครั้งต่อไปที่คุณไปที่หน้าปัญหา / คำขอดึงข้อมูล github ของคุณและตรวจสอบคำขอดึงนั้นคุณจะเห็นข้อความของคุณพร้อมลิงก์เพื่อยืนยันว่าคุณได้ทำการผสานที่ใด

นี่คือภาพหน้าจอของสิ่งที่ฉันหมายถึง

ใส่คำอธิบายภาพที่นี่


6

โดยไปที่โฮมเพจของที่เก็บของคุณคลิกที่สาขาและเปลี่ยนสาขาเริ่มต้นจากต้นแบบเป็นอย่างอื่นในกรณีของฉันคือ "dev"

หลังจากนั้นเมื่อใดก็ตามที่มีคนสร้างคำขอดึงmergeปุ่มจะรวมคำขอเป็น "dev" โดยอัตโนมัติแทนที่จะเป็นมาสเตอร์

ใส่คำอธิบายภาพที่นี่


ขอบคุณสำหรับการแก้ไขข้อผิดพลาด
@ the

4
ไม่จำเป็นต้องขอบคุณเราสำหรับการปรับแต่ง / แก้ไข เป็นสิ่งที่เราทำเพื่อไซต์ เขียนคำตอบที่ดีต่อไปขอบคุณมากพอแล้ว
The Tin Man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.