เพื่ออัปเดตคำขอดึง
หากต้องการอัปเดตคำขอดึง (จุด # 1) สิ่งเดียวที่คุณต้องทำคือเช็คเอาต์สาขาเดียวกับคำขอดึงจากและกดไปอีกครั้ง:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
ทางเลือก - การล้างประวัติการคอมมิท
คุณอาจถูกขอให้สควอชคอมมิชชันของคุณร่วมกันเพื่อให้ประวัติของคลังเก็บนั้นสะอาดหรือคุณต้องการที่จะลบคนกลางที่ทำหน้าที่เบี่ยงเบนความสนใจจาก "ข้อความ" ในคำขอดึง (จุดที่ 2) ตัวอย่างเช่นหากประวัติการกระทำของคุณมีลักษณะเช่นนี้:
$ git remote add parent git@github.com:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem
เป็นความคิดที่ดีที่จะรวมสิ่งต่าง ๆ เข้าด้วยกัน
$ git rebase -i parent/master
นี่จะแจ้งให้คุณเลือกวิธีเขียนประวัติคำขอดึงของคุณต่อไปนี้จะอยู่ในเครื่องมือแก้ไขของคุณ:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
สำหรับการกระทำใด ๆ ที่คุณต้องการเป็นส่วนหนึ่งของการกระทำก่อนหน้านี้ - เปลี่ยนการเลือกเป็นสควอช:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
และปิดโปรแกรมแก้ไขของคุณ จากนั้น Git จะเขียนประวัติใหม่และแจ้งให้คุณส่งข้อความการส่งข้อความสำหรับคอมมิทรวม แก้ไขให้ถูกต้องและประวัติความเป็นมาของคุณจะสั้นลง:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
ผลักดันให้ส้อม:
$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To git@github.com:me/my-fork.git
f1238d0..9de3202 HEAD -> master
และคำขอการดึงของคุณจะมีการคอมมิชชันเดียวโดยรวมการเปลี่ยนแปลงทั้งหมดก่อนหน้านี้แบ่งออกเป็นหลายคอมมิท
การเปลี่ยนประวัติศาสตร์ของ repos สาธารณะเป็นสิ่งที่ไม่ดี
การเขียนประวัติใหม่และการใช้งานgit push -f
ในสาขาที่อาจมีคนอื่นที่ถูกโคลนอยู่แล้วเป็นสิ่งที่ไม่ดี - มันทำให้ประวัติของที่เก็บและการเช็คเอาต์แตกต่างกัน
อย่างไรก็ตามการแก้ไขประวัติส้อมของคุณเพื่อแก้ไขการเปลี่ยนแปลงที่คุณกำลังเสนอให้รวมเข้ากับที่เก็บ - เป็นสิ่งที่ดี เช่นนี้ไม่มีการจองที่บีบ "เสียง" ออกจากคำขอการดึงของคุณ
หมายเหตุเกี่ยวกับสาขา
ในข้างต้นฉันแสดงคำขอดึงที่มาจากmaster
สาขาของคุณไม่มีอะไรผิดปกติ แต่มันสร้างข้อ จำกัด บางอย่างเช่นถ้านี่เป็นเทคนิคมาตรฐานของคุณสามารถเปิด PR ได้หนึ่งครั้งต่อที่เก็บ . เป็นความคิดที่ดีกว่าที่จะสร้างสาขาสำหรับการเปลี่ยนแปลงแต่ละอย่างที่คุณต้องการเสนอ:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets
master
เป็นสาขาเกินไปดังนั้นในทางเทคนิคมันไม่สำคัญ :)