โซลูชั่นหัวข้อ
คำสั่งที่ถูกต้องที่จะตอบคำถามที่โพสต์อาจจะเป็นที่ใด ๆ ของ (สาขาสมมติต่อไปนี้topic
มีการตรวจสอบแล้วออก):
git rebase --onto B master
git rebase --onto master~1 master
git rebase --onto B A
git rebase --onto B C
git rebase --onto B
หากtopic
ไม่ได้เช็คเอาต์คุณเพียง แต่ต่อท้ายtopic
คำสั่ง (ยกเว้นอันสุดท้าย) ดังนี้:
git rebase --onto B master topic
หรือตรวจสอบสาขาก่อนด้วย:
git checkout topic
Reboot String of Commits ใด ๆ เป็น Commit
รูปแบบพื้นฐานของคำสั่งที่เราต้องการคัดลอกมาจากเอกสารประกอบคือ:
git rebase --onto <Target> [<Upstream> [<Branch>]]
<Branch>
เป็นทางเลือกและสิ่งทั้งหมดที่ทำคือตรวจสอบสาขาที่ระบุก่อนดำเนินการคำสั่งที่เหลือ หากคุณได้ตรวจสอบสาขาที่คุณต้องการรีบูตแล้วคุณไม่ต้องการสิ่งนี้ โปรดทราบว่าคุณจะต้องมีการระบุไว้<Upstream>
ในการที่จะระบุหรือคอมไพล์จะคิดว่าคุณกำลังระบุ<Branch>
<Upstream>
<Target>
เป็นความมุ่งมั่นที่เราจะแนบสายของเรามุ่งมั่นที่จะ เมื่อระบุชื่อสาขาคุณเพียงระบุการกระทำหลักของสาขานั้น <Target>
สามารถกระทำใด ๆ ที่จะไม่อยู่ในสตริงของความมุ่งมั่นที่จะถูกย้าย ตัวอย่างเช่น:
A --- B --- C --- D master
\
\-- X --- Y --- Z feature
ต้องการย้ายสาขาคุณลักษณะทั้งหมดคุณไม่สามารถเลือกX
, Y
, Z
หรือfeature
เป็น<Target>
ตั้งแต่เหล่านั้นทั้งหมดจะกระทำภายในกลุ่มที่ถูกย้าย
<Upstream>
มีความพิเศษเพราะมันหมายถึงสองสิ่งที่แตกต่างกัน หากเป็นการกระทำที่เป็นบรรพบุรุษของสาขาที่เช็คเอาท์แล้วมันจะทำหน้าที่เป็นจุดตัด ในตัวอย่างที่ผมให้นี้จะเป็นอะไรที่ไม่C
, หรือD
master
ทั้งหมดกระทำหลังจาก<Upstream>
จนกระทั่งหัวหน้าสาขาที่เช็คเอาต์เป็นคนที่จะถูกย้าย
อย่างไรก็ตามหาก<Upstream>
ไม่ใช่บรรพบุรุษแล้วคอมไพล์สำรองจากการคอมมิทที่ระบุไว้จนกว่าจะพบบรรพบุรุษที่มีสาขาที่เช็คเอาต์ (และยกเลิกหากไม่พบ) ในกรณีของเราเป็น<Upstream>
ของB
, C
, D
หรือmaster
จะส่งผลในการกระทำB
ที่ทำหน้าที่เป็นจุดตัด เป็นตัวเองคำสั่งตัวเลือกและถ้ามันไม่ได้ระบุลักษณะแล้วคอมไพล์ที่ผู้ปกครองของการตรวจสอบออกสาขาซึ่งเป็นเทียบเท่าเข้า<Upstream>
master
ตอนนี้คอมไพล์ได้เลือกคอมมิตที่มันจะตัดและย้ายมันจะใช้มันเพื่อ<Target>
ข้ามสิ่งใดก็ตามที่ถูกนำไปใช้กับเป้าหมายแล้ว
ตัวอย่างและผลลัพธ์ที่น่าสนใจ
ใช้จุดเริ่มต้นนี้:
A --- B --- C --- D --- E master
\
\-- X --- Y --- Z feature
git rebase --onto D A feature
จะนำไปใช้กระทำB
, C
, X
, Y
, Z
ที่จะกระทำD
และสิ้นสุดการกระโดดข้ามB
และC
เพราะพวกเขามีอยู่แล้วถูกนำมาใช้
git rebase --onto C X feature
จะใช้การคอมมิทY
และZ
การคอมมิทC
, ลบคอมมิทX
git checkout B
มาแล้วgit rebase
หรือยัง?