ข้อผิดพลาด git: ไม่สามารถผลักดันผู้อ้างอิงบางคนไปที่ระยะไกล


450

ด้วยเหตุผลบางอย่างฉันไม่สามารถผลักดันได้ในขณะที่ฉันสามารถทำได้เมื่อวานนี้ บางทีฉันอาจยุ่งกับ configs หรืออะไรบางอย่าง

นี่คือสิ่งที่เกิดขึ้น:

เมื่อฉันใช้ต้นกำเนิดต้นกำเนิดการผลักดัน git

gitbashscr

สิ่งที่ไดเร็กทอรีการทำงานและที่เก็บรีโมตของฉันดูเหมือน:

สกรีนช็อตของโฟลเดอร์ไฟล์ Windows ที่มีไดเรกทอรีเหล่านี้: .git, css, js  และไฟล์เหล่านี้: index.php, readme, setsu.php  คำว่า "local" ที่มีลูกศรชี้ไปยังโฟลเดอร์ css  ด้านล่างภาพหน้าจอที่มีหัวเรื่อง "github" และไฟล์ css-folder และ index.php-file


7
ดูเหมือนว่า repo ในพื้นที่ของคุณไม่ได้ซิงค์กับ git repo คุณพยายามดึง git หรือไม่?
R11G

1
ใช่ แต่ฉันไม่มีความรู้เกี่ยวกับไวยากรณ์ต่อไปนี้หลังจาก git pull มันบอกว่า git pull <remote> <branch> คุณช่วยให้ฉันดูตัวอย่างไวยากรณ์สำหรับ git pull ได้หรือไม่
leipzy

1
ตรวจสอบคำถามที่คล้ายกันนี้ - stackoverflow.com/questions/18588974/…
R11G

3
@ R11G ขอบคุณมากครับ! ลิงค์นี้ช่วยฉันstackoverflow.com/a/18589043/3626672
leipzy

2
ฉันได้รับข้อผิดพลาดนั้นใน repo ใหม่ สิ่งนี้ช่วย: stackoverflow.com/a/6518774/2067690
HumanInDisguise

คำตอบ:


620

ถ้า repo ของ GitHub เห็นคอมมิชชันใหม่ผลักไปแล้วในขณะที่คุณกำลังทำงานอยู่ในพื้นที่ฉันจะแนะนำให้ใช้:

git pull --rebase
git push

ไวยากรณ์แบบเต็มคือ:

git pull --rebase origin master
git push origin master

ด้วย Git 2.6+ (ก.ย. 2015) หลังจากทำเสร็จ (ครั้งเดียว)

git config --global pull.rebase true
git config --global rebase.autoStash true

ง่าย ๆgit pullก็เพียงพอแล้ว
(หมายเหตุ: ด้วยGit 2.27 Q2 2020 , a merge.autostashยังมีให้สำหรับการดึงปกติโดยไม่มีการรีบูต)

วิธีการที่คุณจะเล่นใหม่ (คน--rebaseส่วน) กระทำในท้องถิ่นของคุณอยู่ด้านบนของปรับปรุงใหม่origin/master(หรือorigin/yourBranch: git pull origin yourBranch)

ดูตัวอย่างที่สมบูรณ์มากขึ้นในบทที่ 6 ดึงกับ rebaseของหนังสือพ็อกเก็ Git

ฉันอยากจะแนะนำ:

# add and commit first
git push -u origin master

ที่จะสร้างความสัมพันธ์ในการติดตามระหว่างสาขาหลักของคุณกับสาขาต้นน้ำ
หลังจากนั้นการผลักดันในอนาคตสำหรับสาขานั้นสามารถทำได้ง่ายๆ

git push

ดูที่ " ทำไมฉันต้องผลักดันสาขาใหม่อย่างชัดเจน "


เนื่องจาก OP รีเซ็ตแล้วและทำซ้ำการกระทำที่อยู่ด้านบนของorigin/master:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

pull --rebaseไม่จำเป็นต้องเป็น

หมายเหตุ: git reset --mixed origin/masterนอกจากนี้ยังสามารถเขียนได้git reset origin/masterตั้งแต่ตัวเลือกที่หนึ่งเริ่มต้นเมื่อใช้--mixedgit reset


ตกลงเพื่อดำเนินการ git pull ที่คุณแนะนำ --rebase ... หรือไม่ เพราะฉันทำไปแล้ว> ตั้งค่า git - ต้นกำเนิดผสม / หลัก> เพิ่ม git > คอมไพล์ commit -m "นี่คือการกระทำใหม่สำหรับสิ่งที่ฉันตามแผนเดิมที่จะเป็น amendmend"> คอมไพล์หลักผลักดันกำเนิดแนะนำที่นี่stackoverflow.com/questions/18588974/...ครับคำตอบของคุณดูครับที่เป็นประโยชน์
leipzy

3
สำหรับฉันฉันต้องการเรียกใช้ "git commit" :(
Tyler

ขอบคุณแก้ไขปัญหาโง่ ๆ กับ Git LFS ฉันยอมจำนนตัวเองที่จะต้องใช้บรรทัดคำสั่งนับจากนี้ไปฮ่าฮ่า
Tyler C

2
สุดยอดจริงๆ .. คำสั่งด้านล่างใช้งานได้สำหรับฉัน ... รีเซ็ต git - ผสมต้นกำเนิด / เพิ่ม git หลัก git commit -m "นี่เป็นความมุ่งมั่นใหม่สำหรับสิ่งที่ฉันวางแผนไว้ว่าจะได้รับการแก้ไข" git push Origin master ขอบคุณ @VonC
Hari Narayanan

1
ขอบคุณมันใช้งานได้! ฉันกำลังมองหาวิธีแก้ปัญหานี้เป็นเวลาหลายชั่วโมง!
Redion Xhepa

96

ไม่มีใครลอง:

git push -f origin master

ที่ควรแก้ปัญหา

แก้ไข:จาก @Mehdi 's —force pushingความคิดเห็นด้านล่างผมต้องชี้แจงอะไรเกี่ยวกับ คำสั่ง git ด้านบนใช้งานได้อย่างปลอดภัยสำหรับการส่งครั้งแรกเท่านั้น หากมีการกระทำอยู่แล้วให้ดึงคำขอหรือสาขาก่อนหน้านี้เป็นการรีเซ็ตทั้งหมดและตั้งค่าจากศูนย์ ถ้าเป็นเช่นนั้นโปรดดูคำตอบโดยละเอียดของ @VonC สำหรับวิธีแก้ปัญหาที่ดีกว่า


25
ใช้งานได้ แต่ไม่ดีโปรดอย่าใช้มันหากคุณไม่ทราบว่ากำลังทำอะไรอยู่ (อาจจะไม่ทราบว่าสิ่งที่คุณทำถ้าคุณกำลังมองหาใน SO)
เมห์

3
หากคุณกำลังจะลอง-f/ --forceมันปลอดภัยกว่าที่จะใช้--force-with-leaseแทนซึ่งจะยกเลิกหากมีการเปลี่ยนแปลงดาวน์สตรีมที่จะเกิดการอุดตันจากการกด --force-with-leaseเป็นสิ่งจำเป็นสำหรับสถานการณ์การเริ่มต้นใหม่ทุกวัน แต่--forceแทบจะไม่จำเป็นเลย
โจชัวโกลด์เบิร์ก

63

หากคุณเพิ่งใช้git initและเพิ่มไฟล์ของคุณด้วยgit add .หรือคล้ายกันและได้เพิ่มสาขารีโมตของคุณอาจเป็นเพราะคุณไม่ได้ทำgit commit -m 'commit message'อะไร( ) อะไรในพื้นที่เพื่อส่งไปที่รีโมต ... ฉันเพิ่งพบข้อผิดพลาดนี้และนั่นก็เป็นของฉัน ปัญหา.


1
เพิ่งวิ่งเข้าไปในนี้ คำสั่ง Commit ไม่ทำงานในระหว่างการเพิ่ม git โทรดี ขอบคุณ
jgritten

1
ขอบคุณคน! แค่นั้นแหละ. ฉันคิดว่าฉันมุ่งมั่นที่จะเปลี่ยนแปลง ตอนนี้ git push -u master master ทำงานได้ดี
tleo

36

ฉันมีปัญหาเดียวกัน ฉันได้รับปัญหานี้เพราะฉันไม่ได้ทำอะไรเลยแม้แต่ครั้งแรกที่ทำและยังพยายามผลักดัน

เมื่อฉันทำgit commit -m "your msg"แล้วทุกอย่างทำงานได้ดี


8
นั่นไม่สมเหตุสมผลเลย คำถามเดิมเป็นเรื่องเกี่ยวกับท้องถิ่นเป็นคอมไพล์ที่อยู่เบื้องหลัง ไม่ว่าจะเป็น "การอยู่เบื้องหลัง" สามารถแก้ไขได้ที่ฉันจะทำให้การกระทำในท้องถิ่น!
GhostCat

โอ้ฉันลืมที่จะกระทำเช่นกัน: p
Shams Nahid

นอกจากนี้ยังเป็นไปได้ว่ามันจะไม่ช่วยให้คุณสามารถผลักดันด้วยความมุ่งมั่นที่ว่างเปล่า
mboy

3
ฉันเพิ่งมีปัญหานี้และฉันลืมที่จะกระทำ ข้อความแสดงข้อผิดพลาดควรชัดเจนยิ่งขึ้น
Ivan Topić

1
มันใช้กับฉันตั้งแต่ฉันได้รับข้อความแสดงข้อผิดพลาดที่แน่นอนและวิธีนี้แก้ไขปัญหาของฉัน
Diego Fortes

19

เปลี่ยนชื่อสาขาของคุณแล้วกดเช่น:

git branch -m new-name
git push -u new-name

สิ่งนี้ใช้ได้สำหรับฉัน


1
มันใช้งานได้ แต่โปรดอธิบายว่าทำไมเราควรทำเช่นนั้น
kanlukasz

ว้าวนี่ใช้งานได้จริง แต่ทำไม ฉันมีเครื่องหมายขีดคั่นในชื่อสาขาท้องถิ่นของฉัน: my-branch_wont_push. เมื่อฉันเปลี่ยนชื่อเป็นmy_branch_wont_pushแล้วก็git push -u origin my_branch_wont_pushทำงานให้ฉัน
cdabel

13

ฉันค้นหาวิธีแก้ปัญหานี้ด้วยความช่วยเหลือของ GitHub

คุณสามารถดูได้จาก:จัดการกับข้อผิดพลาดที่ไม่ใช่การกรอไปข้างหน้า

มันบอกว่า:

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

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

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

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

1
นี่เป็นกระบวนการปกติเมื่อสิ่งต่าง ๆ ทำงานตามที่คาดไว้ มันไม่ได้ช่วยอะไรเลยเมื่อ git คิดว่ามันทันสมัยอยู่แล้วตาม @rubyandcoffee ถาม
ทิม

10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (สำหรับการตรวจสอบพื้นที่เก็บข้อมูลปัจจุบัน)

  4. git add -A(เพิ่มไฟล์ทั้งหมด)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master


ก่อนกดรหัสคุณต้องดึงจากที่เก็บ
James Siva

คุณสามารถเขียนได้เหมือน git pull --rebase master master
James Siva

6

ฉันประสบปัญหาเดียวกันแก้ไขด้วยขั้นตอนด้านล่าง

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://User_name@bitbucket.org/User_name/sample.git

    (เหนือ url https: //User_name@bitbucket.org/User_name/sample.git อ้างถึง url โครงการ bit bucket ของคุณ)

  5. git push -u origin master

เปรย

ตรวจสอบว่าลิงค์บัญชี git hub ของคุณกับ git ท้องถิ่นของคุณโดยใช้:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

4

หากคุณใช้ gerrit อาจมีสาเหตุมาจากรหัสการเปลี่ยนแปลงที่ไม่เหมาะสมในการส่งข้อมูล ลองลบ Change-Id แล้วดูว่าเกิดอะไรขึ้น


4

จำไว้ว่าให้คอมมิชชันการเปลี่ยนแปลงของคุณก่อนที่จะผลักดันให้ repo Github วิธีนี้อาจช่วยแก้ปัญหาของคุณได้




3
git push origin {your_local_branch}:{your_remote_branch}

git push {your_remote_branch}หากสาขาท้องถิ่นของคุณและสาขาที่ห่างไกลหุ้นที่มีชื่อเดียวกันแล้วคุณสามารถละเว้นชื่อสาขาท้องถิ่นของคุณเพียงแค่ใช้ มิฉะนั้นจะทำให้เกิดข้อผิดพลาดนี้


3

ฉันทำตามขั้นตอนต่อไปนี้และใช้งานได้สำหรับฉัน

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master

2

มันอาจเกิดขึ้นเมื่อคุณไม่มีไฟล์ใด ๆ ลองสร้างไฟล์ข้อความจากนั้นทำตามคำสั่งต่อไปนี้

git add .
git commit -m "first commit"
git push --set-upstream origin master

2

สำหรับฉันปัญหาคือฉันไม่ได้เพิ่มไฟล์ก่อนที่จะกระทำ

git add .

git commit -m "your msg"


2

ใช้ดีที่สุดrm -rf .git/hooksแล้วลองกด git


ที่น่าสนใจมันช่วยฉันในกรณีที่เห็นได้ชัดว่าไม่มีการผูกมัดกับแหล่งกำเนิด (ไม่จำเป็นต้องรีบูต)
pevik

ทำไมคุณถึงโยนเบ็ดทั้งหมดของคุณ? อาจทำการสำรองข้อมูลก่อน
MSpreij

2

ฉันสร้าง repo ที่ว่างเปล่าใน GitHub และมีรหัสของฉันภายใน ฉันประสบปัญหาเดียวกันในขณะนี้ตามลำดับด้านล่าง

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

ประเด็นปัญหา:ฉันพยายามที่จะส่งมอบก่อนที่จะจัดเตรียมไฟล์ที่ฉันมี

ดังนั้นเราจึงจำเป็นต้องจัดเตรียมไฟล์และความมุ่งมั่นไว้

นี่คือลำดับที่ถูกต้อง

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

เนื่องจากฉันรันลำดับที่ไม่ถูกต้องก่อนฉันเพียงแค่รันคำสั่งด้านล่าง

git add .
git commit -m 'Initial Commit'
git push -u origin master

1

ไม่แน่ใจว่าสิ่งนี้มีผลบังคับใช้หรือไม่ จากนั้นฉันก็ผลักไปที่รีโมตโดยใช้ --set-upstream ...


1

การสร้างสาขาใหม่ได้รับการแก้ไขสำหรับฉัน:

git checkout -b <nameOfNewBranch>

ตามที่คาดไว้ไม่จำเป็นต้องรวมเนื่องจากสาขาก่อนหน้ามีอยู่ในสาขาใหม่อย่างสมบูรณ์


1
ฉันมีปัญหานี้อย่างแน่นอนฉันใช้ฟีเจอร์ 22 และกำลังทำอยู่git push origin feature22-fixแต่feature22-fixไม่ได้ออกทั้งในและนอกพื้นที่ห่างไกลดังนั้นฉันต้องเช็คเอ้าท์สาขาในพื้นที่ก่อนแล้วจึงกด
น้ำผึ้ง

1

หากคุณพยายามเริ่มต้นไดเรกทอรีด้วยที่เก็บ GitHub ที่มีอยู่คุณควรตรวจสอบให้แน่ใจว่าคุณยอมรับการเปลี่ยนแปลง

ลองสร้างไฟล์:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

ที่จะวางไฟล์ชื่อเริ่มต้นที่คุณสามารถลบได้ในภายหลัง

หวังว่าคำตอบนี้จะช่วย! โชคดี!



1

ในกรณีของฉันมันเป็นhuskyแพ็คเกจของฉันที่ไม่ยอมผลักดัน

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://username@bitbucket.org/username/my-api.git'

ในการผลักดันอย่างแรงเพียงแค่วิ่ง git push origin master --no-verify

ฉันวิ่งnpm run prepushไปดูการแก้ไขข้อผิดพลาดและนี่คือสาเหตุ:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's loopback-utils@0.8.3 does not satisfy loopback-utils@^0.9.0

วิ่งnpm installและกระทำการและปัญหาได้รับการแก้ไขแล้ว


1

ทำสิ่งเหล่านี้

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

การเข้ารหัสที่มีความสุข!



0

ถ้าไม่มีคำตอบข้างต้นก็ใช้ได้และถ้าหากคุณทำบางสิ่งผิดพลาดไปssh-addเมื่อไม่นานมานี้ ลอง

ssh-add -D

0

สำหรับผู้ใช้ sourcetree

ขั้นแรกให้คอมมิทเริ่มต้นหรือทำให้แน่ใจว่าคุณไม่มีการเปลี่ยนแปลงที่ไม่เป็นธรรมจากนั้นที่ด้านข้างของ sourcetree จะมี "REMOTES" คลิกขวาที่มันแล้วคลิก 'Push to origin' ไปแล้ว


0

สิ่งนี้เกิดขึ้นกับฉันเนื่องจากฉันมีแท็กที่เหมือนกับสาขาและฉันพยายามผลักสาขาให้ห่างไกล


0

ในกรณีของฉันปัญหาคือ (แปลก) ไม่มีสาขาที่เรียกว่าอาจารย์ ฉันเอาที่เก็บจาก Github


0

ฉันกำลังกดสาขาพิมพ์ 'evelop' ที่มีอยู่ซึ่งฉันยังไม่ได้ชำระเงินและฉันต้องการผลักสาขาที่เรียกว่า 'ซองจดหมาย' แทน ดังนั้นสาขาจะต้องมีอยู่ / เช็คเอาท์ที่สำเนาการทำงานในท้องถิ่นเพื่อผลักดันของหลักสูตรดังนั้นข้อผิดพลาดที่ไม่ให้พิมพ์ผิด

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