บางครั้งเรามีอัพสตรีมที่รีบาวด์ / ย้อนกลับสาขาที่เราพึ่งพา นี่อาจเป็นปัญหาใหญ่ - ก่อให้เกิดความขัดแย้งกับเราหากเราล่อง
ความมหัศจรรย์คือ git pull --rebase
การดึง git ปกติคือพูดอย่างหลวม ๆ บางอย่างเช่นนี้ (เราจะใช้ต้นกำเนิดที่เรียกว่าระยะไกลและสาขาที่เรียกว่า foo ในตัวอย่างเหล่านี้ทั้งหมด):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
เมื่อเห็นอย่างรวดเร็วคุณอาจคิดว่า git pull --rebase ทำสิ่งนี้:
git fetch origin
git rebase origin/foo
แต่นั่นจะไม่ช่วยถ้าการรีสตรีม rebase เกี่ยวข้องกับ "การบีบ" (หมายความว่าแพทช์ - รหัสของการกระทำนั้นเปลี่ยนไปไม่ใช่แค่การสั่งซื้อ)
ซึ่งหมายถึง git pull --rebase ต้องทำมากกว่านั้นอีกเล็กน้อย นี่คือคำอธิบายของสิ่งที่มันทำและอย่างไร
สมมติว่าจุดเริ่มต้นของคุณคือ:
a---b---c---d---e (origin/foo) (also your local "foo")
เวลาผ่านไปและคุณได้ทำข้อตกลงไว้กับ "foo" ของคุณเอง:
a---b---c---d---e---p---q---r (foo)
ในขณะเดียวกันด้วยความโกรธแค้นต่อต้านสังคมผู้ดูแลต้นน้ำไม่เพียง แต่ลด "foo" ของเขาเขายังใช้สควอชหรือสองตัว ห่วงโซ่การกระทำของเขาตอนนี้มีลักษณะเช่นนี้:
a---b+c---d+e---f (origin/foo)
การดึง git ณ จุดนี้จะส่งผลให้เกิดความสับสน แม้แต่การเรียก git; คอมไพล์ rebase ต้นกำเนิด / foo จะไม่ตัดเพราะคอมมิต "b" และ "c" ด้านหนึ่งและคอมมิชชัน "b + c" ในอีกด้านหนึ่งจะขัดแย้งกัน (และคล้ายกับ d, e และ d + e)
สิ่งที่git pull --rebase
ไม่ในกรณีนี้คือ
git fetch origin
git rebase --onto origin/foo e foo
สิ่งนี้จะช่วยให้คุณ: