ในโหมดเริ่มต้น git pull เป็นชวเลขสำหรับการดึงข้อมูลคอมไพล์ตามด้วย git ผสาน FETCH_HEAD
เมื่อคุณทำ a git pull origin masterให้
git pullทำการผสานซึ่งมักจะสร้างคอมมิตการผสาน ดังนั้นโดยค่าเริ่มต้นการดึงจากรีโมทจึงไม่ใช่การดำเนินการที่ไม่เป็นอันตราย แต่อย่างใดมันสามารถสร้างคอมมิตใหม่ที่ไม่เคยมีมาก่อน พฤติกรรมนี้อาจสร้างความสับสนให้กับผู้ใช้เนื่องจากสิ่งที่รู้สึกว่าควรจะเป็นการดำเนินการดาวน์โหลดที่ไม่เป็นอันตรายจะเปลี่ยนประวัติการคอมมิตในรูปแบบที่คาดเดาไม่ได้
เพื่อหลีกเลี่ยงปัญหานี้คุณต้อง
git pull --ff-only
(หรือไม่อ่านเพื่อดูว่าอันไหนเหมาะกับความต้องการของคุณ)
ด้วยgit pull --ff-onlyGit จะอัปเดตสาขาของคุณก็ต่อเมื่อสามารถ "ส่งต่ออย่างรวดเร็ว" ได้โดยไม่ต้องสร้างคอมมิตใหม่ หากไม่สามารถทำได้git pull --ff-onlyเพียงแค่ยกเลิกด้วยข้อความแสดงข้อผิดพลาด
คุณสามารถกำหนดค่าไคลเอ็นต์ Git ของคุณให้ใช้--ff-onlyตามค่าเริ่มต้นได้เสมอดังนั้นคุณจะได้รับพฤติกรรมนี้แม้ว่าคุณจะลืมแฟล็กบรรทัดคำสั่ง:
git config --global pull.ff only
หมายเหตุ: --globalแฟล็กจะใช้การเปลี่ยนแปลงสำหรับที่เก็บทั้งหมดบนเครื่องของคุณ หากคุณต้องการลักษณะการทำงานนี้เฉพาะสำหรับที่เก็บที่คุณอยู่ให้ละเว้นแฟล็ก
นำมาจากที่นี่
คำเตือนนี้ถูกเพิ่มใน Git 2.27 ตามที่ Joe ชี้ให้เห็นในคำตอบของเขา
นี่คือลักษณะของคำเตือนทั้งหมด:
การดึงโดยไม่ระบุวิธีการกระทบยอดแตกแขนงเป็นสิ่งที่ไม่ควรทำ คุณสามารถบีบอัดข้อความนี้ได้โดยเรียกใช้คำสั่งต่อไปนี้ก่อนที่จะดึงครั้งต่อไป:
git config pull.rebase false # merge (กลยุทธ์เริ่มต้น)
git config pull.rebase true # rebase
git config pull.ff เฉพาะ # fast-forward เท่านั้น
คุณสามารถแทนที่ "git config" ด้วย "git config --global" เพื่อตั้งค่ากำหนดดีฟอลต์สำหรับที่เก็บทั้งหมด คุณยังสามารถส่ง --rebase, --no-rebase หรือ --ff-only บนบรรทัดคำสั่งเพื่อแทนที่ค่าดีฟอลต์ที่กำหนดค่าไว้ต่อการเรียกใช้
คำเตือนจะแสดงคำสั่งสามคำสั่งเป็นตัวเลือกซึ่งทั้งหมดนี้จะระงับคำเตือน แต่มีวัตถุประสงค์ที่แตกต่างกัน:
git config pull.rebase false # merge (the default strategy)
ซึ่งจะคงลักษณะการทำงานเริ่มต้นและระงับคำเตือน
git config pull.rebase true # rebase
สิ่งนี้กระทำที่ด้านบนของสาขาระยะไกลโดยรักษาสาขาเดียวทั้งในประเทศและจากระยะไกล (ซึ่งแตกต่างจากลักษณะการทำงานเริ่มต้นที่มีสองสาขาที่แตกต่างกันซึ่งเกี่ยวข้องกับสาขาหนึ่งในท้องถิ่นและอีกสาขาหนึ่งในระยะไกลและในการรวมทั้งสองสาขาจะมีการผสาน ).
git config pull.ff only # fast-forward only
สิ่งนี้จะดำเนินการดึงก็ต่อเมื่อสามารถส่งต่อสาขาในพื้นที่ได้อย่างรวดเร็ว หากไม่เป็นเช่นนั้นระบบจะยกเลิกด้วยข้อความแสดงข้อผิดพลาด (และไม่สร้างการคอมมิต)
อัปเดต:
ถ้าคุณมีGit 2.29หรือสูงกว่าตอนนี้คุณสามารถตั้งค่าpull.ffการfalse, trueหรือonlyการกำจัดของคำเตือน
git config pull.ff true
true- นี่คือพฤติกรรมเริ่มต้น Pull จะถูกส่งต่ออย่างรวดเร็วหากเป็นไปได้มิฉะนั้นจะรวมเข้าด้วยกัน
git config pull.ff false
false - Pull ไม่เคยส่งต่ออย่างรวดเร็วและการผสานจะถูกสร้างขึ้นเสมอ
git config pull.ff only
only - Pull จะถูกส่งต่ออย่างรวดเร็วหากเป็นไปได้มิฉะนั้นการดำเนินการจะถูกยกเลิกโดยมีข้อความแสดงข้อผิดพลาด