git: การอัปเดตถูกปฏิเสธเนื่องจากรีโมตมีงานที่คุณไม่มีในเครื่อง


116

ฉันกำลังทำงานเป็นทีมกับนักพัฒนาบางคนที่ใช้ git บน BitBucket เราทุกคนกำลังทำงานในdevสาขาไม่ได้ผลักดันไปmasterจนกว่าจะมีการเปิดตัว

นักพัฒนารายหนึ่งระบุรหัสที่ไม่ถูกต้องซึ่งเขียนทับของฉันเองโดยบังเอิญและตอนนี้ฉันกำลังพยายามส่งรหัสที่ถูกต้องกลับไปที่ repo ฉันอ่านข้อผิดพลาดนี้มาสองสามวันแล้วฉันไม่สามารถส่งไปที่ repo ได้อีกต่อไปเพราะฉันได้รับข้อผิดพลาดต่อไปนี้:

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://myusername@bitbucket.org/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

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

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

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

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

ฉันคงคิดว่าถ้าฉันรักษาคำสั่งนี้ฉันจะไม่ได้รับความขัดแย้งในการผสาน ฉันเดาว่าฉันคิดผิด ขอบคุณอีกครั้ง

อัปเดต: ฉันควรเพิ่มว่าฉันได้ค้นหาสองสามชั่วโมงใน Google และ stackoverflow และทำตามคำแนะนำที่แตกต่างกัน แต่ฉันยังไม่สามารถpushไปที่devสาขาได้

คำตอบ:


43

git pull <remote> master:devจะดึงremote/masterสาขาและรวมเข้ากับlocal/devสาขาของคุณ

git pull <remote> devจะดึงremote/devสาขาและรวมเข้ากับสาขาปัจจุบันของคุณ

ฉันคิดว่าคุณบอกว่ามีการกระทำที่ขัดแย้งกันอยู่remote/devนั่นคือสาขาที่คุณอาจต้องการดึงและรวมเข้าด้วยกัน

ในกรณีนี้คุณไม่ได้รวมความขัดแย้งเข้ากับสาขาในพื้นที่ของคุณซึ่งเป็นเรื่องแปลกเนื่องจากคุณบอกว่าคุณเห็นรหัสที่ไม่ถูกต้องในสำเนาการทำงานของคุณ คุณอาจต้องการตรวจสอบว่าเกิดอะไรremote/masterขึ้น


1
ว้าว ... ฉันไม่เคยรู้มาก่อน แต่มันเข้าท่ามากตอนนี้ สาขาหลักก็ไม่ถูกต้องเช่นกันดังนั้นคำตอบของคุณจะล้างคำถามทั้งหมดของฉัน ฉันยังใหม่อยู่เล็กน้อยในการคอมไพล์ ขอบคุณมากที่บอกความแตกต่างระหว่างสองคนนี้!
delos

6
git pull --rebaseตัวเลือกที่ดีที่สุดสำหรับผมก็คือ
derekmx271

160

คุณสามารถแทนที่การตรวจสอบใด ๆ ที่คอมไพล์ทำได้โดยใช้ "แรงดัน" ใช้คำสั่งนี้ในเทอร์มินัล

git push -f ต้นแบบต้นทาง

อย่างไรก็ตามคุณอาจเพิกเฉยต่องานที่มีอยู่ซึ่งอยู่ในระยะไกล - คุณกำลังเขียนประวัติของรีโมตใหม่อย่างมีประสิทธิภาพเพื่อให้เหมือนกับสำเนาในเครื่องของคุณ


51
การใช้แฟ
ล็ก

6
โหวตลดลงเนื่องจากฉันไม่มีคำเตือนในคำตอบนี้
Melebius

3
โอ! สิ่งนี้บังคับให้ที่เก็บเขียนตัวเองใหม่
Azarsa

3
ฉันมีข้อผิดพลาดเดียวกันกับ github และฉันแก้ไขด้วยคำสั่งนี้ @theeastcoastwest ทำไมคุณถึงบอกว่าสิ่งนี้อันตราย คุณมีเหตุผลอะไร "
simon

4
@simon สิ่งนี้อันตรายเพราะมันไม่สนใจงานที่อยู่ในระยะไกลและบังคับให้คุณเปลี่ยนแปลงใน repo ดังนั้นหากคุณไม่ต้องการทำให้งานของทีมของคุณยุ่งเหยิงอย่าฝืนผลักดัน
Gásten

44

มันเกิดขึ้นเมื่อเรากำลังพยายามที่จะผลักดันให้พื้นที่เก็บข้อมูลระยะไกล Readmeแต่ได้สร้างไฟล์ใหม่ในระยะไกลที่ยังไม่ได้ดึงเลยให้พูด ในกรณีที่ข้อผิดพลาดบอก

git ปฏิเสธการอัปเดต

เนื่องจากเราไม่ได้ทำการอัปเดตรีโมตในสภาพแวดล้อมท้องถิ่นของเรา ดังนั้นดึงก่อนจากระยะไกล

git pull

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

git push origin master

ฉันทำงานgit pull origin developในสาขาการพัฒนาในพื้นที่ของฉัน แต่ตอนนี้แค่ทำgit pullมันได้ผลดีสำหรับฉันฉันไม่รู้ว่าทำไม
Alex

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


11

ซึ่งมักเกิดขึ้นเมื่อ repo มีบางรายการที่ไม่มีในเครื่อง ดังนั้นเพื่อที่จะผลักดันการเปลี่ยนแปลงของเราในกรณีนี้เราจำเป็นต้องรวมการเปลี่ยนแปลงระยะไกลแล้วจึงผลักดัน

ดังนั้นสร้างการดึงจากระยะไกล

git pull origin master

จากนั้นกดการเปลี่ยนแปลงไปที่รีโมทนั้น

git push origin master

7

ฉันแก้ไขแล้วฉันไม่แน่ใจว่าฉันทำอะไรไปบ้าง ฉันพยายามเพียงแค่ผลักและดึงโดยใช้:

git pull <remote> dev แทน git pull <remote> master:dev

หวังว่าสิ่งนี้จะช่วยใครบางคนได้หากพวกเขากำลังมีปัญหาเดียวกัน


6

คุณต้องป้อนข้อมูล:

$ git pull
$ git fetch 
$ git merge

หากคุณใช้ a git push origin master --forceคุณจะมีปัญหาใหญ่


5
ทำไมคุณจำเป็นต้องใช้git fetchและgit mergeอีกครั้งด้วยตนเองหลังจากการทำงานgit pullที่มีพวกเขา ?
Melebius


5

ฉันทำตามขั้นตอนด้านล่างแล้ว ในที่สุดก็ใช้งานได้ดี

ขั้นตอน

1) เริ่มต้นคอมไพล์

2) สถานะ git (สำหรับตรวจสอบสถานะ)

3) เพิ่มคอมไพล์ (เพิ่มไฟล์การเปลี่ยนแปลงทั้งหมด (.))

4) คอมมิตคอมมิต -m "<pass your comment>"

5) git remote add origin "<pass your project clone url>"

6) git pull - อนุญาตให้ไม่เกี่ยวข้องกับประวัติ"<pass your project clone url>"หลัก

7) git push -u "<pass your project clone url>"master


4

จริงๆแล้ว github นั้นง่ายกว่าที่เราคิดไว้มากและมันจะเกิดขึ้นทุกครั้งที่เราพยายามผลักดันแม้ว่าเราจะแทรกไฟล์บางไฟล์ลงในที่เก็บ git ของเราอย่างชัดเจนดังนั้นเพื่อแก้ไขปัญหาให้ลอง ..

: git pull

และแล้ว ..

: git push

หมายเหตุ: หากคุณติดอยู่ใน vim editor โดยไม่ได้ตั้งใจหลังจากดึงที่เก็บของคุณไม่ต้องกังวลเพียงแค่ปิด vim editor แล้วลองกด :)


2

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

ดังนั้นอย่าลืมกดรีเฟรชหรือดึงหากคุณได้รับข้อผิดพลาดนี้แล้วลองอีกครั้ง


1

git pull - ต้นแบบต้นกำเนิด rebase

git push origin master


git push -f ต้นแบบต้นทาง

คำเตือน git push -f origin master

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

1

ข้อผิดพลาดอาจเกิดขึ้นเนื่องจากโครงสร้างที่แตกต่างกันของโค้ดที่คุณกำลังกระทำและมีอยู่ใน GitHub คุณอาจอ้างถึง: วิธีจัดการกับข้อผิดพลาด" ปฏิเสธที่จะรวมประวัติที่ไม่เกี่ยวข้อง ":

$ git pull --allow-unrelated-histories
$ git push -f origin master

1

ตัวเลือกที่ดีที่สุดสำหรับฉันและมันใช้งานได้และเรียบง่าย

git pull --rebase

แล้ว

git push

ขอให้โชคดี


1

นี่คือวิธีที่ฉันแก้ไขปัญหานี้:

  1. git pull origin master
  2. git push origin master

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


0

ฉันมีโครงการ SSDT VS ก่อน ฉันต้องการผลักดันโปรเจ็กต์ดังที่มีไปยัง Github ฉันต้องการให้การผลักดันนั้นเป็นเวอร์ชันเริ่มต้นของ repo ของฉันที่เริ่มต้นสาขาหลัก คำแนะนำของ Donal เกี่ยวกับgit push -f origin masterเป็นวิธีที่ง่ายที่สุด (ที่ฉันเห็น) ในการทำสิ่งนี้ให้สำเร็จ เนื่องจากฉันไม่ต้องกังวลเกี่ยวกับการเขียนอะไรซ้ำมันจึงดูสมเหตุสมผล


0

ผมมีปัญหาเหมือนกัน. มันเกิดขึ้นที่ฉันได้สร้างไฟล์. readme บนที่เก็บโดยไม่ต้องดึงก่อน

คุณอาจต้องการลบไฟล์. Readme หรือดึงก่อนที่จะกด


ฉันไม่แน่ใจว่าคำตอบสำหรับคำถามเก่าอายุ 5 ปีนี้ให้คุณค่าเพิ่มเติมใด ๆ รวมทั้งไม่ได้ให้คำตอบสำหรับปัญหาเฉพาะของ OP เนื่องจากคุณเป็นผู้สนับสนุนรายใหม่โปรดดูคำแนะนำเกี่ยวกับวิธีตอบคำถาม: stackoverflow.com/help/how-to-answer
Sotiris Koukios-Panopoulos

0

คุณสามารถใช้ได้

git pull --rebase <your_reponame> <your_branch>

สิ่งนี้จะช่วยในกรณีที่คุณมีการเปลี่ยนแปลงบางอย่างที่ยังไม่ได้ลงทะเบียนใน repo ในพื้นที่ของคุณ โดยเฉพาะREADME.md


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