Git Pull กับ Git Rebase


127

ฉัน Noob ใน Git และพยายามที่จะเรียนรู้แตกต่างระหว่างVSgit pull git rebaseมีใครช่วยยกตัวอย่างได้ไหมว่าเมื่อใดควรใช้ตัวเลือกใดเนื่องจากฉันรู้สึกว่าทั้งสองมีจุดประสงค์เดียวกัน


ใช่ฉันทำ. ความแตกต่างระหว่าง pull และ rebase คือ pull จะทำการผสาน ดังนั้นคำตอบสำหรับคำถามของคุณอยู่ที่ลิงค์ที่ฉันวางไว้
Thibault D.

1
@ user4943236 1) คุณไม่รู้ด้วยซ้ำว่าใครลงคะแนนคำถามของคุณอย่าไปกล่าวหาคนอื่นโดยไม่มีเหตุผล 2) ถ้ามันเป็นการลงคะแนนของฉันฉันจะไม่ลบมันออกไปเพราะมันง่ายมากที่จะหาคำตอบโดยการอ่าน เอกสารประกอบ
ทิม


สิ่งนี้ตอบคำถามของคุณหรือไม่? git pull VS git fetch Vs git rebase
Shiwangini

คำตอบ:


131

git pullและgit rebaseไม่สามารถใช้แทนกันได้ แต่มีความเชื่อมโยงอย่างใกล้ชิด

git pullดึงการเปลี่ยนแปลงล่าสุดของสาขาปัจจุบันจากรีโมตและใช้การเปลี่ยนแปลงเหล่านั้นกับสำเนาของสาขาในเครื่องของคุณ โดยทั่วไปจะทำได้โดยการรวมกล่าวคือการเปลี่ยนแปลงภายในจะถูกรวมเข้ากับการเปลี่ยนแปลงระยะไกล จึงgit pullคล้ายกับgit fetch & git merge.

Rebasing เป็นอีกทางเลือกหนึ่งในการรวมเข้าด้วยกัน แทนที่จะสร้างคอมมิตใหม่ที่รวมทั้งสองสาขาเข้าด้วยกันมันจะย้ายคอมมิตของกิ่งหนึ่งไปไว้ด้านบนของอีกสาขา

คุณสามารถดึงโดยใช้ rebase แทนการผสาน ( git pull --rebase) การเปลี่ยนแปลงในเครื่องที่คุณทำจะถูกนำกลับมาใช้ใหม่กับการเปลี่ยนแปลงระยะไกลแทนที่จะรวมเข้ากับการเปลี่ยนแปลงระยะไกล

Atlassian มีเอกสารที่ยอดเยี่ยมเกี่ยวกับการรวมกับการปรับใหม่


52

git-pull - ดึงข้อมูลจากและรวมเข้ากับที่เก็บอื่นหรือGIT PULLสาขาในพื้นที่

โดยทั่วไปคุณกำลังดึงสาขาระยะไกลไปยังพื้นที่ของคุณตัวอย่าง:

git pull origin master

จะดึงสาขาหลักไปยังที่เก็บในเครื่องของคุณ

git-rebase - ฟอร์เวิร์ด - พอร์ตโลคัลคอมมิตกับ GIT REBASEหัวอัปสตรีมที่อัปเดต

สิ่งนี้กำลังทำให้การเปลี่ยนแปลงในเครื่องของคุณอยู่เหนือการเปลี่ยนแปลงที่ทำจากระยะไกลโดยผู้ใช้รายอื่น ตัวอย่างเช่น:

  • คุณได้ทำการเปลี่ยนแปลงบางอย่างในสาขาในพื้นที่ของคุณเช่นเรียกว่า SOME-FEATURE
  • ในระหว่างนั้นเพื่อนของคุณกำลังทำงานกับคุณสมบัติอื่น ๆ และเขาได้รวมสาขาของเขาเป็นผู้เชี่ยวชาญ

ตอนนี้คุณต้องการเห็นการเปลี่ยนแปลงของเขาและของคุณในสาขาในพื้นที่ของคุณ จากนั้นคุณชำระเงินmasterสาขา:

git checkout master

จากนั้นคุณสามารถดึง:

git pull origin master

จากนั้นคุณไปที่สาขาของคุณ:

git checkout SOME-FEATURE

และคุณสามารถทำ rebase masterเพื่อรับการเปลี่ยนแปลงล่าสุดจากนั้นและวางสาขาของคุณไว้ด้านบน:

git rebase master

ฉันหวังว่าตอนนี้จะชัดเจนมากขึ้นสำหรับคุณ


15
คุณไม่จำเป็นต้องชำระเงินหลัก อยู่ในสาขาของคุณและทำแล้วgit fetch git rebase origin/master
Antoine Martin

1
การตรวจสอบเจ้าของท้องถิ่นจากนั้นดึงต้นแบบต้นทางจะอัปเดตต้นแบบท้องถิ่นของคุณ นี่เป็นหนึ่งในแนวทางปฏิบัติที่ดีที่สุดที่ควรใช้
Ashwani

21

โดยสังเขป :

-> Git Merge: มันจะรวมการเปลี่ยนแปลงของคุณและจากระยะไกลเข้าด้วยกันและจะสร้างบันทึกประวัติการกระทำอื่น

-> Git Rebase: มันจะทำให้การเปลี่ยนแปลงของคุณอยู่เหนือการเปลี่ยนแปลงระยะไกลใหม่ทั้งหมดและเขียนประวัติการคอมมิตใหม่ดังนั้นประวัติการคอมมิตของคุณจะสะอาดกว่าการรวมคอมไพล์ Rebase คือปฏิบัติการทำลายล้าง นั่นหมายความว่าหากคุณใช้ไม่ถูกต้องคุณอาจสูญเสียงานที่มุ่งมั่นและ / หรือทำลายความสอดคล้องของที่เก็บข้อมูลของนักพัฒนาคนอื่น ๆ

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