จะอัพเดทคำขอดึงจาก repo ที่มีการแยกได้อย่างไร


592

ดังนั้นฉันจึงแยก repo ก่อนแล้วจึงทำคอมมิชชันที่ forked นั้น ฉันเปิดคำขอดึงแล้ว คำขอดึงแสดงการเปลี่ยนแปลงทั้งหมดที่ฉันต้องการ

หลังจากตรวจสอบคำขอดึงของฉันมีการเปลี่ยนแปลงหลายอย่างที่เจ้าของซื้อคืนต้องการให้ฉันทำก่อนที่เขาจะยอมรับ ฉันได้ทำการเปลี่ยนแปลงในทางแยกแล้วตอนนี้ฉันจะอัปเดตคำขอดึงกับการเปลี่ยนแปลงเหล่านั้นได้อย่างไร (หรือนี่ไม่ใช่วิธีที่ฉันควรจัดการ)



7
@ PaulDraper ฉันไม่เห็นด้วยผู้ใช้รายนั้นรู้แล้วและนำเสนอวิธีการต่างๆในการอัปเดตคำขอแบบดึงและถามว่าวิธีไหนดีที่สุด ในขณะที่ฉันไม่รู้วิธีการใด ๆ และกำลังถามถึงการมีอยู่ของพวกเขา ตามความนิยมของคำถามนี้แสดงว่าเป็นกรณีนี้สำหรับผู้ใช้อื่น ๆ
stevebot

6
ฉันคิดว่าความนิยมนั้นเกิดจากความจริงที่ว่า (1) นี่เป็นคำถามทั่วไปที่ดีมากและ (2) ผู้ใช้บางคนบาดเจ็บที่นี่แทนที่จะเป็น หากมีการระบุเดิมว่าเป็นสิ่งที่ซ้ำกันพวกเขาจะพบว่าคำถามอื่นนั้นเหมือนกันและตอบคำถามของพวกเขา
พอลเดรเปอร์

คำตอบ:


584

คุณทำถูกต้องแล้ว คำขอดึงจะอัปเดตโดยอัตโนมัติ กระบวนการคือ:

  1. เปิดคำขอดึง
  2. ยอมรับการเปลี่ยนแปลงตามข้อเสนอแนะใน repo ท้องถิ่นของคุณ
  3. กดไปยังสาขาที่เกี่ยวข้องของทางแยกของคุณ

คำขอดึงจะเพิ่มคอมมิทใหม่ที่ด้านล่างของการสนทนาดึงคำขอโดยอัตโนมัติ (นั่นคือมีอยู่แล้วเลื่อนลง! )


73
ดี! ฉันกำลังตรวจสอบทุกที่ แต่คำขอดึงที่แท้จริง เวทมนตร์ของมัน, มนต์ดำ, ฉันจะไม่ถามมัน
stevebot

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

3
สิ่งนี้ดูเหมือนจะไม่เป็นเช่นนั้นอีกต่อไปแม้ว่าจะเป็นในอดีต นี่คือตัวอย่างของคำขอดึงที่ฉันทำ ( github.com/toopay/bootstrap-markdown/pull/167 ) เปรียบเทียบกับสาขาของตัวเอง ( github.com/mhuggins/bootstrap-markdown/commits/ ...... ) อยากรู้วิธีการทำเช่นนี้อีกต่อไปเนื่องจากกระบวนการดูเหมือนจะเปลี่ยนไป
Matt Huggins

1
GitHub บอกคุณจริง: "เพิ่มการกระทำที่มากขึ้นโดยการผลักดันไปยังสาขา SolveWorldHunger ใน ChangeTheWorldProject"
flow2k

1
เหมือนกันที่นี่ - ฉันไม่เห็นการเปลี่ยนแปลงจาก repo แยกในพื้นที่เก็บข้อมูลหลัก ดูเหมือนว่าข้อผิดพลาด GitHub
andrfas

77

การอัปเดตคำขอดึงใน GitHub นั้นง่ายเหมือนการยอมรับการเปลี่ยนแปลงที่ต้องการลงในสาขาที่มีอยู่ (ซึ่งใช้กับคำขอดึง) แต่บ่อยครั้งที่มันต้องการสควอชการเปลี่ยนแปลงเป็นคอมมิทเดียว:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... และตอนนี้คำขอการดึงมีการมอบหมายเพียงครั้งเดียว


ลิงค์ที่เกี่ยวข้องเกี่ยวกับการรีบูต:


2
โหวตขึ้นสำหรับการกล่าวถึง rebase มันช่วยลดเสียงรบกวนในประวัติการแก้ไข
stevebot

. +11 (ใช่ฉันตั้งใจ rrrrepeating ที่สำคัญการใช้คอมไพล์ rebase / รับ / สควอชคือการทำงานที่ดี.
javadba

11
ข้อเสียของวิธีการนี้คือคุณกำลังนำคุณไปก่อนหน้า นั่นหมายความว่าหากมีการแสดงความคิดเห็นคำขอดึงพวกเขาจะหายไปและหายไปพร้อมกับการส่งต้นฉบับ
blowekamp

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

35

เพียงแค่กดไปที่สาขาที่คำขอการดึงอ้างอิง ตราบใดที่คำขอดึงยังคงเปิดอยู่ก็ควรได้รับการอัปเดตด้วยคอมมิทที่เพิ่มเข้ามาโดยอัตโนมัติ


14

ฉันทำตามขั้นตอนด้านล่าง:

  1. git reset --hard <commit key of the pull request>
  2. การเปลี่ยนแปลงของฉันในรหัสที่ฉันต้องการจะทำ
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>

1
ดีมากฉันชอบวิธีนี้! GitHub ยังซ่อน (แต่เก็บไว้) ส่วนที่ล้าสมัยของรหัสและความคิดเห็นที่เกี่ยวข้อง เป็นการดีที่จะจำไว้ว่าหากคำขอการดึงมีหลายการกระทำและสิ่งที่ต้องแก้ไขไม่ได้อยู่ที่ปลายกิ่ง "git reset - ฮาร์ด" จะยกเลิกการเปลี่ยนแปลงทั้งหมดที่กระทำหลังจากรหัสที่ระบุ ฉันมีข้อมูลสำรองที่ฉันสมัครด้วยตนเอง ไม่สะดวกมากถ้ามีการมอบหมายมากกว่าหนึ่งอย่าง ...
Nagev

3

หากใช้GitHub บน Windows :

  1. ทำการเปลี่ยนแปลงในเครื่อง
  2. เปิด GitHub เปลี่ยนเป็นที่เก็บข้อมูลโลคัลดับเบิลคลิกที่เก็บ
  3. สลับสาขา (ใกล้ด้านบนของหน้าต่าง) ไปยังสาขาที่คุณสร้างคำขอดึงจาก (เช่นสาขาที่ด้านแยกของการเปรียบเทียบ)
  4. ควรจะเห็นตัวเลือกในการคอมมิทคอมเม้นท์ด้านขวาและคอมมิชชันท้องถิ่นของคุณ
  5. คลิกซิงค์ที่ด้านบนซึ่งเหนือสิ่งอื่นใดผลักดันการกระทำของคุณจากท้องถิ่นไปยังส้อมระยะไกลของคุณใน GitHub
  6. คำขอดึงจะถูกอัปเดตโดยอัตโนมัติพร้อมข้อผูกพันเพิ่มเติม นี่เป็นเพราะคำขอที่ถูกดึงนั้นแสดงให้เห็นถึงความแตกต่างกับกิ่งของคุณ หากคุณไปที่หน้าคำขอดึง (หน้าที่คุณและคนอื่นสามารถแสดงความคิดเห็นเกี่ยวกับคำขอดึงของคุณ) จากนั้นแท็บ Commits ควรมีการมอบหมายเพิ่มเติม

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

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