คำถามก็กล่าวว่าgit pull
เป็นเหมือน+git fetch
git merge
แต่อะไรคือความแตกต่างระหว่างgit pull
VS git fetch
+ git rebase
?
คำถามก็กล่าวว่าgit pull
เป็นเหมือน+git fetch
git merge
แต่อะไรคือความแตกต่างระหว่างgit pull
VS git fetch
+ git rebase
?
คำตอบ:
มันควรจะเห็นได้ชัดสวยจากคำถามของคุณที่คุณจริงเพียงแค่ถามเกี่ยวกับความแตกต่างระหว่างและgit merge
git rebase
ดังนั้นสมมติว่าคุณอยู่ในกรณีทั่วไป - คุณทำงานบางอย่างในสาขาหลักของคุณและคุณดึงออกมาจากต้นกำเนิดซึ่งยังได้ทำงานบางอย่าง หลังจากการดึงข้อมูลสิ่งที่มีลักษณะเช่นนี้:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
หากคุณรวมที่จุดนี้ (พฤติกรรมเริ่มต้นของการดึง git) โดยสมมติว่าไม่มีข้อขัดแย้งใด ๆ คุณจะพบกับสิ่งนี้:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
หากในอีกทางหนึ่งคุณได้ทำการ rebase ที่เหมาะสมคุณจะได้รับสิ่งนี้:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
เนื้อหาของแผนผังการทำงานของคุณควรจะเหมือนกันทั้งสองกรณี คุณเพิ่งสร้างประวัติศาสตร์ที่แตกต่างกันนำขึ้นไป การปฏิเสธจะเขียนประวัติของคุณใหม่ทำให้ดูเหมือนว่าคุณได้ทำสัญญากับสาขาต้นแบบใหม่ของต้นกำเนิด ( R
) แทนที่จะเป็นที่ที่คุณส่งมอบ แต่เดิม ( H
) คุณไม่ควรใช้วิธีการคืนเงินหากมีคนดึงข้อมูลจากสาขาหลักของคุณแล้ว
สุดท้ายโปรดทราบว่าคุณสามารถตั้งค่าจริงgit pull
สำหรับสาขาที่กำหนดให้ใช้ rebase แทนการรวมโดยการตั้งค่าพารามิเตอร์ config branch.<name>.rebase
เป็นจริง git pull --rebase
นอกจากนี้คุณยังสามารถทำเช่นนี้เพื่อดึงเดียวโดยใช้
git pull
ก็เหมือนวิ่ง git fetch
แล้วgit merge
git pull --rebase
ก็เหมือนgit fetch
แล้วgit rebase
git pull
เป็นเหมือน+git fetch
git merge
"ในโหมดเริ่มต้นการดึง git นั้นเป็นการจดชวเลขสำหรับ
git fetch
ตามด้วยgit merge
FETCH_HEAD" แม่นยำยิ่งขึ้นgit pull
ทำงานgit fetch
ด้วยพารามิเตอร์ที่กำหนดจากนั้นgit merge
จะเรียกเพื่อผสานส่วนหัวสาขาที่ดึงมาเข้ากับสาขาปัจจุบัน "
(Ref: https://git-scm.com/docs/git-pull )
'แต่อะไรคือความแตกต่างระหว่างgit pull
VS git fetch
+ git rebase
'
อีกครั้งจากแหล่งเดียวกัน:
git pull --rebase
"ด้วย --rebase มันจะเรียกใช้การรีต Git แทนการคอมไพล์ Git"
'ความแตกต่างระหว่างmerge
และrebase
'
นั่นคือคำตอบที่นี่ด้วย:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(ความแตกต่างระหว่างการเปลี่ยนแปลงวิธีบันทึกประวัติเวอร์ชัน)
git fetch + git rebase
ทำงานของคำสั่งต่อจากนี้ ไม่มีความขัดแย้งมากขึ้นในทรีคอมไพล์ของเราจากตอนนี้ :)