“ Git การอัปเดตที่ไม่ใช่การไปข้างหน้าอย่างรวดเร็วถูกปฏิเสธ” หมายความว่าอย่างไร


153

ฉันใช้ Git เพื่อจัดการคอมพิวเตอร์สองเครื่องและการพัฒนาของฉัน ฉันกำลังพยายามเปลี่ยนแปลง GitHub และฉันได้รับข้อผิดพลาด

ล้มเหลวในการผลักดัน refs <repo>บางอย่างเพื่อ เพื่อป้องกันไม่ให้คุณสูญเสียประวัติอัปเดตที่ไม่ใช่การส่งต่ออย่างรวดเร็วถูกปฏิเสธ รวมการเปลี่ยนแปลงระยะไกลก่อนที่จะผลักดันอีกครั้ง

มีสาเหตุใดที่ทำให้เกิดปัญหานี้และฉันจะแก้ไขได้อย่างไร

แก้ไข:

การดึง repo ส่งคืนสิ่งต่อไปนี้:

* branch master-> master (ไม่ใช่ไปข้างหน้าอย่างเร็ว) ทันสมัยแล้ว

การผลักดันยังคงทำให้ฉันมีข้อผิดพลาดดังกล่าว


ดูเพิ่มเติมGit ปฏิเสธไม่ใช่ข้างหน้าอย่างรวดเร็ว

คำตอบ:


136

GitHub มีส่วนที่ดีที่เรียกว่า "การจัดการกับข้อผิดพลาด " non-fast-forward "

ข้อผิดพลาดนี้อาจค่อนข้างล้นหลามในตอนแรกอย่ากลัว ใส่เพียงแค่คอมไพล์ไม่สามารถทำให้เกิดการเปลี่ยนแปลงในระยะไกลโดยไม่สูญเสียกระทำจึงไม่ยอมผลักดัน

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

ในกรณีอื่น ๆ ข้อผิดพลาดนี้เป็นผลมาจากการเปลี่ยนแปลงการทำลายล้างที่ทำในประเทศโดยใช้คำสั่งเช่นหรือgit commit --amend ในขณะที่คุณสามารถแทนที่ระยะไกลโดยการเพิ่มไปยังคำสั่งคุณควรทำเช่นนั้นถ้าคุณแน่ใจว่าอย่างนี้คือสิ่งที่คุณต้องการจะทำ Force-pushes อาจทำให้เกิดปัญหาสำหรับผู้ใช้รายอื่นที่ดึงข้อมูลจากสาขาระยะไกลและถือเป็นการปฏิบัติที่ไม่ดี เมื่อสงสัยไม่ได้มีแรงผลักดันgit rebase
--forcepush


Git ไม่สามารถทำการเปลี่ยนแปลงบนรีโมทเช่นการผสานไปข้างหน้าอย่างรวดเร็วซึ่งVisual Git Referenceแสดงให้เห็นถึงลักษณะดังนี้:

ข้อความแสดงแทน

นี่ไม่ใช่กรณีของคุณอย่างแน่นอนแต่ช่วยให้เห็นว่า "การกรอไปข้างหน้า" คืออะไร (โดยที่HEADสาขาถูกย้ายไปที่การคอมมิชชันใหม่ล่าสุด)


โดยbranch master->master (non-fast-forward) Already-up-to-dateปกติแล้ว" " จะใช้สำหรับสาขาท้องถิ่นที่ไม่ติดตามส่วนระยะไกล
ดูตัวอย่างของคำถาม SO นี้ " git pull บอกว่าทันสมัย ​​แต่การกด git ปฏิเสธการส่งต่อที่ไม่เร็ว "
หรือกิ่งไม้ทั้งสองเชื่อมต่อกัน แต่ด้วยความไม่เห็นด้วยกับประวัติของพวกเขา:
ดู " เรื่องราว GIT ที่ไม่มีวันจบสิ้น - ฉันทำอะไรผิดที่นี่ "

ซึ่งหมายความว่าสาขาการโค่นล้มและสาขาต้นแบบ git ระยะไกลของคุณไม่เห็นด้วยกับบางสิ่ง
การเปลี่ยนแปลงบางอย่างถูกผลัก / มุ่งมั่นกับสิ่งที่ไม่ได้อยู่ในอีก
ไฟขึ้นgitk --allและควรให้เบาะแสว่าอะไรผิดพลาด - มองหา "ส้อม" ในประวัติศาสตร์


53

หมายความว่ามีการส่งข้อผูกมัดอื่น ๆ ไปยังที่เก็บข้อมูลระยะไกลที่แตกต่างจากการกระทำของคุณ โดยปกติคุณสามารถแก้ปัญหานี้ได้ด้วย

git pull

ก่อนที่คุณจะผลักดัน

ในท้ายที่สุด "กรอไปข้างหน้า" หมายความว่าสามารถใช้คอมมิตได้ที่ด้านบนสุดของแผนผังการทำงานโดยไม่ต้องผสาน


2
นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน! ฉันลืมฉันเปลี่ยน readme.md บนเว็บไซต์ที่เก็บ!
ryanwinchester

14

การอัปเดตอย่างรวดเร็วคือการเปลี่ยนแปลงเพียงด้านเดียวหลังจากการคอมมิทครั้งล่าสุดดังนั้นไม่จำเป็นต้องผสาน นี่เป็นการบอกว่าคุณต้องรวมการเปลี่ยนแปลงก่อนจึงจะสามารถพุชได้


8

คุณอาจต้องการใช้กำลังกับการกดในกรณีนี้

git push ต้นกำเนิด --force


1
มันผิด. แหล่งที่มาทั้งหมดของ GitHub จะถูกลบและผลักเฉพาะที่คุณใหม่แหล่งที่มาเก่าจะถูกลบ
logeshpalani98

6

ไม่ต้องgit -fทำpushเนื่องจากอาจส่งผลให้เกิดผลเสียหายร้ายแรงในภายหลัง

คุณเพียงแค่ต้องทำgit pullสาขาท้องถิ่นของคุณ

Ex:

git pull origin 'your_local_branch'

จากนั้นทำ git push


0

คุณต้องรวมและแก้ไข conflicts locallyก่อนที่จะผลักดันการเปลี่ยนแปลงของคุณไปยัง repo ระยะไกล / ส้อม

1) pull (ดึงข้อมูลและผสาน)

$ git pull remote branch 

2) ผลักดันการเปลี่ยนแปลง

$ git push remote branch 

คุณยังคงมีทางเลือกที่รวดเร็วในการpushบังคับใช้--forceตัวเลือก แต่ควรหลีกเลี่ยงเนื่องจากอาจทำให้เกิดการสูญเสียการเปลี่ยนแปลงหรือส่งผลเสียต่อผู้มีส่วนร่วมคนอื่น

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