การพุช Git ล้มเหลว“ การอัปเดตแบบไม่กรอไปข้างหน้าถูกปฏิเสธ”


99

ฉันแก้ไขที่เก็บ GIT ของฉันผ่าน Git Online หลังจากที่ฉันพยายามผลักดันการเปลี่ยนแปลงรหัสในเครื่องของฉันฉันพบข้อผิดพลาด:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


คำตอบ:


137

ดึงการเปลี่ยนแปลงก่อน:

git pull origin branch_name

1
หากวิธีนี้ไม่สามารถแก้ปัญหาของคุณได้ตรวจสอบให้แน่ใจว่าคุณกำลังผลักดันไปยังสาขาเดียวกับสาขาที่คุณกำลังทำงานอยู่ ตรวจสอบว่าคุณอยู่ที่สาขาใดด้วย "git status"
afilina

1
คำสั่งนี้ใช้ได้ผลกับฉัน แต่ฉันอยากรู้ว่าทำไมถึงไม่: git pull? ระยะไกลเท่ากับดังนั้นมันจริงทำงาน:origin git pull originมันควรจะอัพเดททุกสาขาไม่ใช่เหรอ?
Karlen Kishmiryan

84

เพิ่ม - บังคับในบรรทัดคำสั่งของคุณหากคุณแน่ใจว่าต้องการผลักดัน เช่นใช้git push origin --force(ฉันขอแนะนำให้ใช้บรรทัดคำสั่งเนื่องจากคุณจะพบการสนับสนุนเพิ่มเติมจากผู้ใช้รายอื่นด้วยบรรทัดคำสั่งนอกจากนี้ SmartGit อาจไม่สามารถทำได้) ดูข้อมูลเพิ่มเติมในไซต์นี้: http://help.github.com/ รีโมท /


8
- Force จะแก้ปัญหาของคุณ แต่อาจเป็นอันตรายต่อผู้อื่น ควรใช้ด้วยความระมัดระวัง (และความรู้) เท่านั้น
schoetbi

7
-1 เพราะการบังคับให้พูดโดยทั่วไปเป็นความคิดที่แย่มาก
joshin4colours

6
+1 เพราะ 5 คนเห็นด้วย @ joshin4colours ให้ -1. แต่ในขณะที่การบังคับผลักดันไม่ใช่ความคิดที่ดีที่สุดเสมอไป (ซึ่งคอมไพล์ทำให้ชัดเจนโดยการปฏิเสธการผลักดันของคุณ) หากเป็นความคิดที่ไม่ดี 100% ของเวลาตัวเลือกจะไม่มีอยู่ คำแนะนำของ Matt ที่นี่จะเป็นประโยชน์กับคนอื่น ๆ อย่างแน่นอน
user1271772

2
อย่าลังเลที่จะใช้--forceถ้าคุณเป็นคนเดียวที่ใช้สาขานั้น มันทำให้เกิดปัญหาเมื่อแชร์สาขากับนักพัฒนาคนอื่น ๆ
Robert Brisita

22

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

git pull --rebase

ตอนนี้คุณสามารถกดไปที่รีโมต

git push 

สำหรับข้อมูลเพิ่มเติมใช้เวลาดูที่Git rebase อธิบายและบทที่ 3.6 Git กิ่ง - rebasing


2
ในกรณีของฉันgit pull --rebaseลงเอยด้วยThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

ฉันพบข้อผิดพลาดเดียวกันเพียงเพิ่ม"--force"ในคำสั่งก็ใช้งานได้

git push origin master --force

6
จะมีผลกับสิ่งนี้หรือไม่?
jayunit100

8
สูญเสียการกระทำของผู้อื่น
Giovanni Toraldo

1
ฉันมีสถานการณ์ลูกบอลในกอล์ฟที่นี้ก็คือว่าสิ่งที่ฉันอยากจะทำ ... พัดไปเนื้อหาของเพียงแค่สร้างสาขาต้นแบบระยะไกลกับสิ่งใหม่ สิ่งนี้ช่วยแก้ปัญหาของฉันได้ แม้ว่าจะไม่ใช่วิธีแก้ปัญหาสำหรับทุกคน แต่--forceก็มีประโยชน์
Brad

1
ฉันไม่คิดว่าคำตอบนี้สมควรถูกโหวตลง 6 ครั้ง นี่เป็นวิธีแก้ปัญหาที่ถูกต้องอย่างไรก็ตามผู้เขียนอาจอธิบายเพิ่มเติมเกี่ยวกับสถานการณ์ที่คำสั่งนี้จะเป็นประโยชน์ หากจะกล่าวถึงมันก็คุ้มค่าที่จะเขียน (ฟังก์ชันสำหรับ --force)
Aiden Strydom

5

ฉันมีปัญหาเดียวกัน
เหตุผลก็คือสาขาในพื้นที่ของฉันสูญเสียการติดตามไปยังคู่ค้าระยะไกล

หลังจาก

git branch branch_name --set-upstream-to=origin/branch_name
git pull

และการแก้ไขความขัดแย้งที่รวมเข้าด้วยกันฉันสามารถผลักดัน


ดูเหมือนว่าคุณจะพลาดการเปลี่ยนแปลงในสาขาระยะไกล
ozma

5

คุณสามารถเพิ่ม--force-with-rentให้กับคำสั่งก็จะใช้งานได้

git push --force-with-lease

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

ดูข้อมูลเพิ่มเติมที่นี่


1

(หนึ่ง) โซลูชันสำหรับ Netbeans 7.1: ลองดึง สิ่งนี้อาจจะล้มเหลวเช่นกัน ตอนนี้ให้ดูบันทึก (โดยปกติจะแสดงใน IDE ตอนนี้) มีหนึ่งบรรทัดขึ้นไปว่า:

"ดึงล้มเหลวเนื่องจากไฟล์นี้:"

ค้นหาไฟล์นั้นลบ (สำรองข้อมูลไว้ก่อน) โดยปกติจะเป็นไฟล์. gitignore ดังนั้นคุณจะไม่ลบโค้ด ทำซ้ำการผลักดัน ตอนนี้ทุกอย่างควรจะทำงานได้ดี


1

การใช้--rebaseตัวเลือกนี้ใช้ได้ผลกับฉัน

  • git pull <remote> <branch> --rebase

จากนั้นกดไปที่ repo

  • git push <remote> <branch>

เช่น

git pull origin master --rebase

git push origin master


0

ฉันมีปัญหาเดียวกัน ฉันแก้ไขด้วย

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
OP กล่าวเกี่ยวกับการผลักดันการเปลี่ยนแปลงรหัสในเครื่อง checkoutจะเขียนทับการเปลี่ยนแปลงเหล่านี้หรืออย่างน้อยก็จะไม่รวมไว้ในพุช
trejder

0

นี่คือสิ่งที่ได้ผลสำหรับฉัน สามารถพบได้ในเอกสาร git ที่นี่

หากคุณอยู่ในสาขาที่คุณต้องการคุณสามารถทำได้:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

พบปัญหาเดียวกันในการแก้ไขให้รันgitคำสั่งต่อไปนี้

  • git pull {url} --rebase
  • git push --set-upstream {url} master

คุณต้องสร้างที่เก็บบน github ก่อน


0

บางครั้งในขณะที่ดึงจากคอมไพล์ของคุณ HEAD จะหลุดออกไป คุณสามารถตรวจสอบได้โดยป้อนคำสั่ง:

git branch 
  • (HEAD แยกออกจาก 8790704)

    ปรมาจารย์

    พัฒนา

จะดีกว่าถ้าคุณย้ายไปที่สาขาของคุณและดึงออกจากสาขาของคุณ

git checkout develop

git pull origin develop

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