Egit ปฏิเสธแบบไม่กรอไปข้างหน้า


89

ฉันได้รับข้อความนี้ในขณะที่ส่งไปยังที่เก็บ github ช่วยบอกขั้นตอนการแก้ไขทีละขั้นตอนได้ไหม ฉันผลักดันเพียงครั้งเดียวและมันก็สำเร็จ แต่เมื่อฉันอัปเดตโปรเจ็กต์และพยายามผลักดันคอมมิตครั้งที่สองมันแสดง "มาสเตอร์ปฏิเสธไม่ใช่กรอไปข้างหน้า" และไม่อนุญาตให้ฉันผลักดัน กรุณาอธิบายขั้นตอน


ฉันประสบปัญหาเดียวกันหลังจากสร้าง repo ใหม่ด้วย "Initialize this repository with a README" ฉันลบอันนั้นออกแล้วสร้างใหม่อีกครั้งโดยไม่มีเชชบ็อกซ์
andrew

@andrew is right
Dany Wehbe

คำตอบ:


228

ฉันมีปัญหาเดียวกันนี้และฉันสามารถแก้ไขได้ afk5min พูดถูกปัญหาคือสาขาที่คุณดึงรหัสจากนั้นมีการเปลี่ยนแปลงบนที่เก็บระยะไกล ตามแนวทางปฏิบัติ git มาตรฐาน ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ) คุณต้อง (ตอนนี้) รวมการเปลี่ยนแปลงเหล่านั้นที่ที่เก็บระยะไกลเข้ากับการเปลี่ยนแปลงในเครื่องของคุณก่อนที่คุณจะ สามารถกระทำได้ สิ่งนี้สมเหตุสมผลบังคับให้คุณรับการเปลี่ยนแปลงของผู้อื่นและรวมเข้ากับโค้ดของคุณเพื่อให้แน่ใจว่าโค้ดของคุณยังคงทำงานร่วมกับการเปลี่ยนแปลงอื่น ๆ

ก็ตามไปตามขั้นตอน

  1. กำหนดค่า "การดึงข้อมูล" เพื่อดึงข้อมูลสาขาที่คุณดึงมาจากเดิม

  2. ดึงข้อมูลสาขาระยะไกล

  3. รวมสาขาระยะไกลนั้นเข้ากับสาขาในพื้นที่ของคุณ

  4. ยอมรับการเปลี่ยนแปลง (รวม) ใน repo ในพื้นที่ของคุณ

  5. ผลักดันการเปลี่ยนแปลงไปยัง repo ระยะไกล

ในรายละเอียด...

  1. ในคราสเปิดมุมมอง 'Git Repositories'

  2. ตรวจสอบให้แน่ใจว่าคุณเห็นที่เก็บโลคัลของคุณและสามารถเห็นที่เก็บระยะไกลเป็นโฟลเดอร์ย่อย ในเวอร์ชันของฉันเรียกว่ารีโมตจากนั้นฉันจะเห็นโครงการระยะไกลภายในนั้น

  3. มองหาลูกศรสีเขียวที่ชี้ไปทางซ้ายนี่คือลูกศร "ดึงข้อมูล" คลิกขวาและเลือก "กำหนดค่าการดึงข้อมูล"

  4. คุณควรเห็น URI ตรวจสอบให้แน่ใจว่าชี้ไปที่ที่เก็บระยะไกล

  5. ดูในส่วนการแมปอ้างอิงของป๊อปอัป ฉันว่างเปล่า สิ่งนี้จะระบุการอ้างอิงระยะไกลที่คุณต้องการดึงข้อมูล คลิก 'เพิ่ม'

  6. พิมพ์ชื่อสาขาที่คุณต้องการดึงข้อมูลจากที่เก็บระยะไกล ของฉันเป็น 'เจ้านาย' (btw ดร็อปดาวน์ที่นี่จะดีมาก !! ตอนนี้คุณต้องพิมพ์) ดำเนินการต่อในป๊อปอัปในที่สุดคลิก 'เสร็จสิ้น'

  7. คลิก 'บันทึกและดึงข้อมูล' สิ่งนี้จะดึงข้อมูลอ้างอิงระยะไกลนั้น

  8. ดูในโฟลเดอร์ "Branches" ของที่เก็บในเครื่องของคุณ ตอนนี้คุณควรเห็นสาขาระยะไกลนั้นในโฟลเดอร์ระยะไกล อีกครั้งฉันเห็น 'master'

  9. คลิกขวาที่สาขาในพื้นที่ในโฟลเดอร์ 'Local' ของ 'Branches' ซึ่งมีชื่อว่า 'master' เลือก 'ผสาน' จากนั้นเลือกสาขาระยะไกลซึ่งมีชื่อว่า 'ต้นกำเนิด / ต้นแบบ'

  10. ดำเนินการผ่านการผสาน

  11. ยอมรับการเปลี่ยนแปลงใด ๆ กับที่เก็บในเครื่องของคุณ

  12. พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกล

  13. ไปดื่มเครื่องดื่มอร่อย ๆ แสดงความยินดีกับตัวเอง ใช้เวลาที่เหลือของวันหยุด


7
สิ่งนี้ควรถูกทำเครื่องหมายว่าเป็นคำตอบ ทำงานอย่างมีเสน่ห์ ปัญหานี้เกิดขึ้นแม้ว่าฉันจะไม่ได้เพิ่มไฟล์ใด ๆ (ไฟล์ README ปกติ) เมื่อสร้าง repo บน GitHub สำหรับโครงการของฉันใน Eclipse ขอบคุณมากสำหรับคำอธิบายทีละขั้นตอนที่ง่ายต่อการปฏิบัติตาม
rbaleksandar

ปัญหานี้ใช้เวลาหนึ่งปีในการแยกแยะจนกว่าฉันจะอ่านโพสต์ของคุณ ในกรณีของฉันฉันไม่มีรีโมต แต่ Eclipse สร้างค่าเริ่มต้นที่เรียกว่า 'origin'
Eugene van der Merwe

หวานในที่สุดฉันก็สามารถรวมกับ Eclipse ได้ ประเด็นสำคัญคือการใช้มุมมอง Git Repositories เพื่อทำการผสานไม่ใช่มุมมอง Team Synchronize ตามปกติ คงจะดีถ้า eGit ในการซิงโครไนซ์มุมมองในทีมสามารถปิดใช้งานตัวเลือกทั้งหมดที่ไม่ทำอะไรเลย
dan carter

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

1
คลิกขวาที่โปรเจ็กต์จากนั้นMergeในมาสเตอร์จากนั้นคลิกขวาอีกครั้งที่โปรเจ็กต์push branch Masterทำงาน
user1207289

16

ในกรณีของฉันฉันเลือกForce Updateช่องทำเครื่องหมายขณะกด มันทำงานได้อย่างมีเสน่ห์


สิ่งนี้ได้ผลสำหรับฉันด้วย ฉันมีเงื่อนไขของ OP หลังจาก "แก้ไข" คอมมิต และการดึงข้อมูลทำให้ฉัน "ไม่มีอะไรจะเรียก"
Twilite

11

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


4
ในกรณีนี้คอมไพล์ค่อนข้างโง่ฉันผลักการเปลี่ยนแปลงทั้งหมดไปที่รีโมท และฉันเป็นเพียงงานเดียวในโครงการนี้ ทำไมบนโลกต้องดึงรีโมทก่อนถึงจะกดได้อีก ???? การเปลี่ยนแปลงที่ดึงมาจากท้องถิ่นของฉัน แต่เดิม
Junchen Liu

7

ใช้ได้กับ Eclipse Luna + Eclipse Git 3.6.1

ผม,

  1. ที่เก็บ git ที่โคลน
  2. ทำการเปลี่ยนแปลงบางอย่างในซอร์สโค้ด
  3. การเปลี่ยนแปลงขั้นตอนจาก Git Staging View
  4. ในที่สุดก็กระทำและผลักดัน!

และฉันประสบปัญหานี้กับ EGit และนี่คือวิธีแก้ไข ..

ใช่มีคนทำการเปลี่ยนแปลงก่อนที่ฉันจะยอมรับการเปลี่ยนแปลงของฉัน ดังนั้นการเปลี่ยนแปลงจึงถูกปฏิเสธ หลังจากเกิดข้อผิดพลาดนี้การเปลี่ยนแปลงจะถูกส่งไปยังที่เก็บในเครื่อง ฉันไม่ต้องการเพียงแค่Pullการเปลี่ยนแปลงเพราะฉันต้องการรักษาlinear historyตามที่ระบุไว้ - ในกรณีใดบ้างที่อาจเป็นอันตราย

ดังนั้นฉันจึงทำตามขั้นตอนต่อไปนี้

  1. จากมุมมอง Git Repository ให้คลิกขวาที่
    โครงการGit ที่เกี่ยวข้อง
  2. เลือกFetch from Upstream- มันดึงการอัปเดตระยะไกล (การอ้างอิงและวัตถุ) แต่ไม่มีการอัปเดตภายในเครื่อง สำหรับข้อมูลเพิ่มเติมโปรดดูความแตกต่างระหว่าง 'git pull' และ 'git fetch'?
  3. เลือกRebase...- เปิดป๊อปอัปคลิกPreserve merges during rebaseดูว่าทำไม
    "rebase --preserve-merges" ของ git ทำอะไรกันแน่ (และทำไม?)
  4. คลิกที่ Rebase button
  5. ถ้ามี / มี conflict(s)ไปที่ขั้นตอนที่ 6 อื่น ๆ ขั้นตอนที่ 11
  6. Rebase Resultป๊อปอัพจะปรากฏเพียงคลิกที่OK
  7. file comparator จะเปิดขึ้นคุณต้องแก้ไข left side fileจะเปิดขึ้นคุณจำเป็นต้องปรับเปลี่ยน
  8. เมื่อคุณดำเนินการรวมการเปลี่ยนแปลงอย่างถูกต้องแล้วให้ไปที่Git Stagingมุมมอง
  9. stage the changes. กล่าวคือadd to index
  10. ในมุมมองเดียวกันให้คลิกที่Rebase->Continue ->ทำซ้ำ 7 ถึง 10 จนกว่าข้อขัดแย้งทั้งหมดจะได้รับการแก้ไข
  11. จากHistoryมุมมองเลือกแถวการคอมมิตของคุณแล้วเลือกPush Commit
  12. เลือกRebase Commits of local.......ช่องทำเครื่องหมายแล้วคลิกถัดไป อ้างถึงเหตุผล - Git: rebase ไปยังสาขาการพัฒนาจากต้นน้ำ
  13. คลิกที่ Finish

หมายเหตุ:หากคุณมีการคอมมิตที่เก็บในเครื่องหลายรายการคุณต้องรวมคอมมิตไว้ในคอมมิตเดียวเพื่อหลีกเลี่ยงการผสานหลายรายการ


ฉันเห็นด้วยกับการใช้ rebase แทนการผสาน จะดีกว่าเนื่องจากไม่สร้างการรวมคอมมิตที่ไม่จำเป็น (นอกหัวข้อ: Stack Overflow เป็นเรื่องที่ไร้สาระโดยสิ้นเชิงและปฏิเสธความคิดเห็นของฉัน แต่เพียงผู้เดียวตามความจริงที่ว่าเดิมฉันเขียน "+1 สำหรับ" ความคิดเห็นของฉันสร้างสรรค์อย่างสมบูรณ์แบบขอขอบคุณ)
nyuszika7h

4

กำหนดค่า หลังจากกดรหัสเมื่อคุณได้รับข้อความปฏิเสธคลิกที่กำหนดค่าและคลิกเพิ่มข้อมูลจำเพาะดังที่แสดงในภาพนี้

การอ้างอิงแหล่งที่มาและการอ้างอิงปลายทาง เลื่อนลงและคลิกที่ ref / head / yourbranchname และคลิกที่ Add Spec อีกครั้ง

ป้อนคำอธิบายภาพที่นี่ ตรวจสอบให้แน่ใจว่าคุณได้เลือกการบังคับอัปเดต

ป้อนคำอธิบายภาพที่นี่ สุดท้ายบันทึกและพุชรหัสไปที่ repo


3

เปิดมุมมองคอมไพล์:

1- เลือกโครงการของคุณและเลือกผสาน 2- เลือกการติดตามระยะไกล 3- คลิกตกลง

Git จะรวมสาขาระยะไกลกับที่เก็บในเครื่อง

4- แล้วดัน


2

ข้อผิดพลาดนี้หมายความว่าที่เก็บระยะไกลมีการกระทำอื่น ๆ และได้นำหน้าสาขาในพื้นที่ของคุณ
ฉันลองทำ git pull ตามด้วย git push หากไม่มีการเปลี่ยนแปลงที่ขัดแย้งกัน git pull จะรับรหัสล่าสุดไปยังสาขาในพื้นที่ของฉันในขณะที่คงการเปลี่ยนแปลงของฉันไว้เหมือนเดิม
จากนั้น git push ผลักการเปลี่ยนแปลงของฉันไปยังสาขาหลัก


ดูเหมือนว่าผู้คนจำนวนมากจะพลาดความละเอียดง่ายๆนี้: D
Black

0

ฉันพบว่าคุณต้องอยู่ในคอมมิตล่าสุดของคอมไพล์ ต่อไปนี้คือขั้นตอนที่ต้องดำเนินการ: 1) ตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำงานกับไฟล์เดียวกันมิฉะนั้นคุณจะพบข้อผิดพลาด 2) ดึงการเปลี่ยนแปลงล่าสุด 3) ยืนยันการอัปเดตของคุณ

หวังว่านี่จะช่วยได้


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