ใส่ในไม่ช้าได้รับ:
Before rebase After rebase
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \ \
D---E---H---I (HEAD) \ E'---H' (HEAD)
\
D---E---H---I
git rebase --onto F D H
ซึ่งเหมือนกับ (เพราะ--ontoรับอาร์กิวเมนต์หนึ่งตัว):
git rebase D H --onto F
หมายถึง rebase กระทำในช่วง (D, H] ด้านบนของเอฟ Notice ช่วงที่เหลือมือพิเศษ.มันเป็นพิเศษเพราะมันเป็นเรื่องง่ายที่จะระบุวันที่ 1 กระทำโดยการพิมพ์เช่นbranchจะให้gitพบ 1 แยกกระทำจากbranchIE ซึ่งนำไปสู่DH
กรณี OP
o---o (A)
\
o (B)(HEAD)
git checkout B
git rebase --onto B A
สามารถเปลี่ยนเป็นคำสั่งเดียว:
git rebase --onto B A B
สิ่งที่ดูเหมือนว่าข้อผิดพลาดที่นี่เป็นตำแหน่งของBซึ่งหมายความว่า "ย้ายกระทำบางอย่างที่นำไปสู่สาขาBที่ด้านบนของB" คำถามคือสิ่งที่ "บางคนกระทำ" หากคุณเพิ่มการ-iตั้งค่าสถานะคุณจะเห็นว่าเป็นการกระทำที่ชี้HEADไป ความมุ่งมั่นถูกข้ามไปเนื่องจากมีการใช้กับ--ontoเป้าหมายBแล้วจึงไม่มีอะไรเกิดขึ้น
คำสั่งเป็นเรื่องไร้สาระในกรณีใด ๆ ที่ชื่อกิ่งจะถูกทำซ้ำเช่นนั้น เพราะนี่คือช่วงของการกระทำจะกระทำบางอย่างที่มีอยู่แล้วในสาขาและในช่วง rebase ทั้งหมดของพวกเขาจะถูกข้ามไป
git rebase <upstream> <branch> --onto <newbase>คำอธิบายเพิ่มเติมและการใช้บังคับของ
git rebase ค่าเริ่มต้น
git rebase master
ขยายเป็น:
git rebase --onto master master HEAD
git rebase --onto master master current_branch
เช็คเอาต์อัตโนมัติหลังจากรีบูต
เมื่อนำมาใช้ในทางมาตรฐานที่ชอบ:
git checkout branch
git rebase master
คุณจะไม่ได้แจ้งให้ทราบว่าหลังจากที่ rebase gitย้ายbranchให้มากที่สุดเมื่อเร็ว ๆ นี้ rebased กระทำและไม่git checkout branch(ดูgit reflogประวัติ) เป็นที่น่าสนใจอย่างไรเมื่ออาร์กิวเมนต์ที่ 2 คือกระทำกัญชาแทนชื่อ rebase สาขายังคงทำงาน แต่มีสาขาที่จะย้ายเพื่อให้คุณจบลงใน "หัวแฝด" แทนการตรวจสอบออกไปยังสาขาย้ายไม่มี
ละเว้นกระทำที่ต่างหลัก
masterใน--ontoจะนำมาจาก 1 git rebaseอาร์กิวเมนต์
git rebase master
/ \
git rebase --onto master master
ดังนั้นในทางปฏิบัติมันสามารถกระทำอื่น ๆ หรือสาขา วิธีนี้คุณสามารถ จำกัด จำนวนกระทำ rebase โดยการคนล่าสุดและออกจากกระทำที่ต่างหลัก
git rebase --onto master HEAD~
git rebase --onto master HEAD~ HEAD # Expanded.
จะลดการกระทำเดี่ยวชี้HEADไปmasterและจบลงใน "HEAD เดี่ยว"
หลีกเลี่ยงการจ่ายเงินอย่างชัดเจน
ค่าเริ่มต้นHEADหรือการcurrent_branchโต้แย้งนั้นเกิดขึ้นตามบริบทจากที่ที่คุณอยู่นี่คือสาเหตุที่คนส่วนใหญ่เช็คเอาต์ไปยังสาขาที่ต้องการรีบูต แต่เมื่อมีการให้ข้อโต้แย้ง rebase ครั้งที่ 2 อย่างชัดเจนคุณไม่จำเป็นต้องชำระเงินก่อนที่ rebase จะผ่านมันไปโดยปริยาย
(branch) $ git rebase master
(branch) $ git rebase master branch # Expanded.
(branch) $ git rebase master $(git rev-parse --abbrev-ref HEAD) # Kind of what git does.
ซึ่งหมายความว่าคุณสามารถ rebase กระทำและสาขาจากใด ๆสถานที่ ดังนั้นร่วมกับเช็คเอาต์อัตโนมัติหลังจากรีบูต คุณไม่ได้มีสาขาแยก rebased เช็คเอาท์ก่อนหรือหลัง rebase
(master) $ git rebase master branch
(branch) $ # Rebased. Notice checkout.