ทำไมฉันไม่สามารถส่งคำสั่งที่ว่างเปล่าได้


35
  git commit --amend --allow-empty

แล้วก็

  git push origin master

คอมไพล์กล่าวว่า

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

ทำไม? จะแก้ไขได้อย่างไร?

git 

คำตอบ:


56

ปัญหาไม่ได้ว่าคุณกำลังผลักดันว่างกระทำ
มันเป็นเรื่องของการผลักดันที่แตกต่างกันกระทำ (หนึ่งกับ SHA1 ที่แตกต่างกัน) มากกว่าหนึ่งกระทำการผลักดันอยู่แล้ว
นั่นคือสิ่งที่git commit --amendทำ: มันแก้ไขการคอมมิชชันล่าสุดมันไม่ได้สร้างอันใหม่

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

git push -f origin master

คุณควรทำ:

git commit --allow-empty

คุณจะได้สร้างใหม่ (ว่าง) กระทำซึ่งคุณอาจจะมีการผลักดันโดยไม่มีปัญหาใด ๆ


5

หากคุณต้องการสร้างคำขอดึงบน Github คุณสามารถ:

git commit --allow-empty -m "make pull request"

จากนั้นสร้างคำขอดึงโดยไม่มีการเปลี่ยนแปลง


3

เพื่อชี้แจงคำตอบที่ยอมรับได้เนื่องจากฉันไม่มีชื่อเสียงพอที่จะแสดงความคิดเห็น:

เมื่อคุณใช้

git commit --amend

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

  O (old commit)
 /
O-O (amended commit)

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


0

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

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