ความแตกต่างระหว่าง git pull --rebase และ git pull --ff-only


116

สมมติว่าorigin/masterมีการกระทำA--B--Cของฉันและมีการกระทำlocal/masterA--B--D

จะเกิดอะไรขึ้นถ้าฉันใช้git pull --rebase?

จะเกิดอะไรขึ้นถ้าฉันใช้git pull --ff-only?

มีความแตกต่างในโครงสร้างการคอมมิตที่เกิดขึ้นหรือไม่?

คำตอบ:


140

จะเกิดอะไรขึ้นถ้าฉันใช้ git pull --rebase

git pull --rebase เทียบเท่ากับ

git fetch
git rebase origin/master

กล่าวคือการเปลี่ยนแปลงระยะไกลของคุณ ( C) จะถูกนำไปใช้ก่อนการเปลี่ยนแปลงภายใน ( D) ส่งผลให้เกิดโครงสร้างต่อไปนี้

A -- B -- C -- D

จะเกิดอะไรขึ้นถ้าฉันใช้ git pull --ff-only

มันจะล้มเหลว

git pull --ff-only สอดคล้องกับ

git fetch
git merge --ff-only origin/master

--ff-onlyใช้การเปลี่ยนแปลงระยะไกลเฉพาะในกรณีที่สามารถส่งต่อได้อย่างรวดเร็ว จากผู้ชาย:

ปฏิเสธที่จะรวมและออกด้วยสถานะที่ไม่ใช่ศูนย์เว้นแต่ว่า HEAD ปัจจุบันจะเป็นปัจจุบันอยู่แล้วหรือการผสานสามารถแก้ไขได้เป็นการกรอไปข้างหน้า

เนื่องจากสาขาในพื้นที่และระยะไกลของคุณแตกต่างกันจึงไม่สามารถแก้ไขได้โดยกรอไปข้างหน้าและgit pull --ff-onlyจะล้มเหลว


1
จะเกิดอะไรขึ้นหากไม่มีการDเปลี่ยนแปลงในท้องถิ่น คำสั่งทั้งสองจะเทียบเท่ากันหรือไม่?
Nico

8
A--B--Cใช่พวกเขาทั้งสองจะส่งผลให้
Gabriele Petronella

1
จะgit pull --rebase --ff-onlyทำอย่างไร? (สมมติว่ามี C & D)
Refael Ackermann

3
IIRC ตัวเลือก --ff-only ถูกละเว้นเมื่อจับคู่กับ --rebase
Gabriele Petronella

5
@BreakingBenjamin มีประโยชน์ถ้าคุณต้องการรับประกันประวัติเชิงเส้น โดยค่าเริ่มต้นpullสามารถแนะนำ merge commits ในขณะที่คุณอาจต้องการทำงานกับ rebase และ ff เท่านั้น
Gabriele Petronella
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.