ใส่ในไม่ช้าได้รับ:
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 แยกกระทำจากbranch
IE ซึ่งนำไปสู่D
H
กรณี 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.