คำถามก็กล่าวว่าgit pullเป็นเหมือน+git fetchgit merge
แต่อะไรคือความแตกต่างระหว่างgit pullVS git fetch+ git rebase?
คำถามก็กล่าวว่าgit pullเป็นเหมือน+git fetchgit merge
แต่อะไรคือความแตกต่างระหว่างgit pullVS git fetch+ git rebase?
คำตอบ:
มันควรจะเห็นได้ชัดสวยจากคำถามของคุณที่คุณจริงเพียงแค่ถามเกี่ยวกับความแตกต่างระหว่างและgit mergegit 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 fetchgit merge
"ในโหมดเริ่มต้นการดึง git นั้นเป็นการจดชวเลขสำหรับ
git fetchตามด้วยgit mergeFETCH_HEAD" แม่นยำยิ่งขึ้นgit pullทำงานgit fetchด้วยพารามิเตอร์ที่กำหนดจากนั้นgit mergeจะเรียกเพื่อผสานส่วนหัวสาขาที่ดึงมาเข้ากับสาขาปัจจุบัน "
(Ref: https://git-scm.com/docs/git-pull )
'แต่อะไรคือความแตกต่างระหว่างgit pullVS 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ทำงานของคำสั่งต่อจากนี้ ไม่มีความขัดแย้งมากขึ้นในทรีคอมไพล์ของเราจากตอนนี้ :)