Git push ถูกปฏิเสธ "ไม่กรอไปข้างหน้า"


91

ตอนนี้ฉันค่อนข้างใหม่ที่gitยังใช้มันเพื่อจัดการโค้ดของเราในสภาพแวดล้อมแบบทีม ฉันมีปัญหาในการเปลี่ยนใหม่และแก้ไขโดยใช้

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

ตอนนี้ฉันต้องการที่จะผลักดันการเปลี่ยนแปลงของฉันและเรียกใช้คำสั่งต่อไปนี้

$ git push origin feature/my_feature_branch

ทำให้ฉันมีข้อผิดพลาดต่อไปนี้:

To ssh://git@coderepo.com:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://git@coderepo.com:7999/repo/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

ฉันจะทำอย่างไรเพื่อกำจัดข้อผิดพลาด

PS: ฉันหลีกเลี่ยงที่จะใช้--forceตัวเลือกนี้ให้มากที่สุด


คำตอบ:


79

ดูเหมือนว่าคนที่ผลักดันใหม่กระทำระหว่างสุดท้ายของคุณและgit fetch git pushในกรณีนี้คุณต้องทำซ้ำขั้นตอนของคุณและตั้งฐานใหม่my_feature_branchอีกครั้ง

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

หลังจากที่ผมขอแนะนำให้ไปตรวจสอบสถานการณ์ด้วยgit fetchgitk --all


1
สิ่งที่ต้องทำเพื่อเปิดใช้ git pull origin master: master ซึ่งควรเป็นค่าเริ่มต้นในการผสาน นี่เป็นความขัดแย้งในการรวมหรือไม่ นี่เป็นคำถามเดียวที่ถูกถาม
mathtick

25

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

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp

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

19

ฉันมีปัญหานี้! ฉันพยายาม: git fetch + git merge แต่ไม่ได้รับการแก้ไข! ฉันลองแล้ว: git pull และยังไม่ได้รับการแก้ไข

จากนั้นฉันลองสิ่งนี้และแก้ไขปัญหาของฉัน (คล้ายกับคำตอบของ Engineer):

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

8
สิ่งนี้ทำให้ฉันสับสนฉันผลักดันสิ่งต่างๆให้เชี่ยวชาญโดยตรงและผลักดันการปรับใช้จากทั้งวัน ... และทุกคนก็โกรธ .... เคล็ดลับที่ยอดเยี่ยม!
Mike Q

6
อาจต้องการอธิบายสิ่งที่คุณทำโดยสรุปก่อนที่จะมอบเครื่องมืออันตรายให้ใคร
Mirv - Matt


7

ฉันไปปาร์ตี้ช้า แต่ฉันพบคำแนะนำที่เป็นประโยชน์ในหน้าความช่วยเหลือของ githubและฉันต้องการแบ่งปันที่นี่

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

หากมีบุคคลอื่นส่งไปยังสาขาเดียวกับคุณ Git จะไม่สามารถพุชการเปลี่ยนแปลงของคุณได้:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'
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 fetch origin
# Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

หรือคุณสามารถใช้git pullเพื่อดำเนินการทั้งสองคำสั่งพร้อมกัน:

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work

4

ลองใช้คำสั่งนี้

$ git push -f -u origin <name of branch>

กล่าวคือ $ git push -f -u origin master


นั่นใช้ได้ผลกับกรณีของฉันเมื่อคนอื่นไม่ทำ บางครั้งคุณต้องบอก git -f -u
gcr

1

เขียนล็อกบนที่เก็บโลคัลที่แชร์

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


1

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

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch

0

ใน Eclipse ให้ทำดังต่อไปนี้:

GIT Repositories> Remotes> Origin> คลิกขวาแล้วพูดว่าดึงข้อมูล

ที่เก็บ GIT> การติดตามระยะไกล> เลือกสาขาของคุณและพูดว่าผสาน

ไปที่โปรเจ็กต์คลิกขวาที่ไฟล์ของคุณแล้วพูดว่าดึงข้อมูลจากต้นน้ำ


0
  1. ย้ายรหัสไปยังสาขาใหม่ - git branch -b tmp_branchyouwantmergedin
  2. เปลี่ยนเป็นสาขาที่คุณต้องการรวมเข้า - git checkout mycoolbranch
  3. รีเซ็ตสาขาที่คุณต้องการรวมเป็น - git branch reset - hard HEAD
  4. รวมสาขา tmp ลงในสาขาที่ต้องการ - git branch ผสาน tmp_branchyouwantmergedin
  5. ผลักดันไปยังจุดเริ่มต้น


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