ข้อผิดพลาดในการดึง git: ข้อผิดพลาด: การอ้างอิงระยะไกลอยู่ แต่คาดว่า


227

ข้อความเต็ม:

error: Ref refs/remotes/origin/user is at 3636498c2ea7735fdcedc9af5ab3c8689e6abe77 but expected a21359c6cc2097c85775cde6a40105f4bd7100ec
From github.com:{github project url}
 ! a21359c..6273ffc  user -> origin/user  (unable to update local ref)

3
git push --forceเห็นได้ชัดว่าคนเขียนโค้ดประวัติศาสตร์ของพื้นที่เก็บข้อมูลโดย git pull --forceพยายามที่จะเรียก
xaizek

1
ให้ข้อผิดพลาดเดียวกันกับ git push --force
Sanjeev Kumar Dangi

5
ตอบคำถามนี้เพื่อแก้ไขข้อผิดพลาดนี้ - stackoverflow.com/questions/3046436/ …
Sanjeev Kumar Dangi

คำตอบ:


225

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

ลบสาขาระยะไกลที่ไม่ถูกต้อง (คุณไม่ควรมีสาขาที่แตกต่างกันในแต่ละกรณี) จากนั้นgit remote prune originทุกอย่างจะทำงานได้


ขอบคุณสำหรับคำตอบ. นี่ไม่ใช่ปัญหาของข้อผิดพลาดนี้ ฉันพบวิธีแก้ไขปัญหานี้แล้วและโพสต์ในความคิดเห็นด้านล่างคำถาม
Sanjeev Kumar Dangi

2
ช่วยสำหรับ Mac OS X เช่นกัน (ระบบไฟล์เริ่มต้นไม่คำนึงถึงขนาดตัวพิมพ์)
Tammo Freese

12
ใช่ปัญหาที่คำนึงถึงขนาดตัวพิมพ์บน Windows ทำให้เกิดปัญหา ฉันแก้ไขด้วยการลบการอ้างอิงใน.git\refs\remotes\originโฟลเดอร์ด้วยตนเองและจากนั้นgit pullอีกครั้ง
Roy Ling

และสำหรับผู้ที่ไม่ทราบว่าโฟลเดอร์. git จะอยู่ที่ใดมันจะถูกสร้างขึ้นภายในโฟลเดอร์โครงการ / พื้นที่ทำงานของคุณ: D
kumar

1
นี่คือข้อผิดพลาด git (อย่างน้อยข้อความแสดงข้อผิดพลาดไม่ถูกต้อง) ฉันหวังว่าบางคนสามารถรายงานข้อผิดพลาดนี้ให้กับโครงการคอมไพล์ มันยากสำหรับฉันที่จะรายงานข้อผิดพลาดให้กับโครงการคอมไพล์ github.com/git/git
ชายทองสัมฤทธิ์

190

แก้ไขถาวร

git update-ref -d แก้ไขอินสแตนซ์ของข้อผิดพลาดนี้เช่น

git update-ref -d refs/remotes/origin/user

โปรดทราบว่าสิ่งนี้จะไม่ส่งผลกระทบระยะไกล

ในกรณีของฉันการgit fetchดึงข้อมูลสาขานั้นอีกครั้งและการติดตาม / ดึง git ไม่ทำให้เกิดข้อผิดพลาด "การอ้างอิงระยะไกลอยู่ แต่คาดว่า"

หากวิธีนี้ใช้ไม่ได้ผลเป็นการแก้ไขชั่วคราว:

โปรดทราบว่าหากคุณไม่สนใจสาขาที่เป็นปัญหา (เช่นคุณเพียงแค่ต้องการอัปเดตข้อมูลหลักไม่ใช่ที่มา / ผู้ใช้) การgit pullแก้ไขปัญหาคือการดึงข้อมูลจากนั้นเพียงรวมสาขาที่คุณสนใจเช่น

git fetch # may give an error for a particular branch, but other branches will still be successfully fetched
git merge origin/master

นี่ควรเป็นวิธีการแก้ปัญหาที่ยอมรับได้เพราะมันแก้ปัญหาได้โดยไม่ต้องสัมผัสระยะไกล
Cerno

52

\.git\refs\remotes\originเพียงแค่ลบไฟล์และโฟลเดอร์ที่อยู่ภายใต้ ทำงานได้เมื่อคุณไม่มีการเปลี่ยนแปลงที่ไม่ได้ชำระ


สิ่งนี้อาจไม่ทำงานหากการอ้างอิงระยะไกลของคุณเป็นแบบ 'อัดแน่น' ดังนั้นจึงไม่อยู่ในการอ้างอิง / รีโมท / ** @ วิธีแก้ปัญหาของ JDiMatteo ควรใช้งานได้แล้ว
Alexander Bird

2
ทำงานให้ฉัน ขอบคุณตัน!
Swapnil Patwa

ทำงานเหมือนจับใจ! ขอบคุณ!
Anurag S Sharma

43

ฉันใช้วิธีนี้เพื่อแก้ปัญหา:

git gc --prune=now

2
ปัญหานี้ได้รับการแก้ไขสำหรับฉัน
Aamir Rizwan

2
สำหรับฉันเช่นกัน .. --- :)
Aravind R Pillai

3
ขอบคุณโซลูชันนี้แก้ไขให้ฉัน คุณช่วยอธิบายเพิ่มเติมเล็กน้อยเกี่ยวกับโซลูชันที่คุณให้ไว้ได้ไหม
Aamol

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

42

ใช้คำสั่งด้านล่างสองคำสั่งทีละคำ

git gc --prune=now

git remote prune origin

นี่จะช่วยแก้ปัญหาของคุณ


1
ใช้งานได้สำหรับฉัน แต่เมื่อฉันทำอีกคอมไพล์ดึงปัญหานี้ขึ้นมาอีกครั้ง
Jojin

@Jojin เหมือนกับคุณ และในที่สุดฉันก็เลือกวิธีที่ Prakash Saravanan จัดหาให้
xi.lin

1
ควรได้รับการจัดอันดับสูงกว่าคำแนะนำในการแก้ไขไฟล์ git :)
Mike Wise

วิธีนี้ใช้ได้ผลสำหรับฉันเท่านั้น ขอบคุณ!
insaineyesay

12

ฉันต้องลบสาขาของฉันจากบรรทัดคำสั่งของฉันที่:

.git\refs\remotes\{my remote}\{**my branch**}

แล้วทำด้วยตนเอง:

git pull [remote_name] [branch_name]

ฉันสามารถดึงการเปลี่ยนแปลง

หมายเหตุ: ฉันใช้SourceTreeและไม่สามารถดึงได้


ในที่สุดฉันเปลี่ยนชื่อรีโมทของฉัน: ฉันมีรีโมทสองตัวคือ "Bitbucket / staging" และ "bitbucket / staging" ในประวัติ SourceTree ของฉัน แต่มีเพียง "Bitbucket" ปรากฏบนบรรทัดคำสั่งเมื่อทำ: git remote -v ดังนั้นฉันจึงเปลี่ยนชื่อ Bitbucket เป็น bitbucket และความขัดแย้งในที่สุดก็หายไปหวังว่าสิ่งนี้จะช่วยให้ผู้ใช้ SourceTree มีโอกาสมากที่สุด
jogam5

ฉันต้องลบสาขาออกจาก.git\packed-refsก่อนที่จะได้รับการแก้ไขสำหรับฉัน
ไมเคิล

6

การฮาร์ดรีเซ็ตจะแก้ไขปัญหาได้เช่นกัน

git reset --hard origin/master

คุณได้เลือกคำตอบที่ดีที่สุดแล้วหรือยัง?
mruanova

5

ขั้นตอนที่ชัดเจนขึ้น

  1. ในอาคารผู้โดยสาร

    cd /.git/refs/remotes/origin
    
  2. ทำ lsคุณจะเห็นสาขาและหัว

  3. ลบสาขาที่คุณคิดว่ามีปัญหา

    rm branchname
    
  4. หากไม่ได้ผลให้ลบสาขา / HEAD ทั้งหมด

    • คุณอาจจะวนาดึง

หวังว่ามันจะใช้งานได้ในขณะนี้


นี่เป็นสิ่งสำคัญเหมือนกันgit update-ref -d <branchname>หรือไม่?
jt000

2

ลองสิ่งนี้มันใช้งานได้สำหรับฉัน ในอาคารผู้โดยสารของคุณ: git remote prune origin.


2

น่าเสียดายที่คำสั่ง GIT เช่นการตัดและรีเซ็ตหรือการกดไม่ได้ผลสำหรับฉัน ลูกพรุนทำงานเพียงครั้งเดียวและส่งคืนปัญหา

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

หากคุณมีข้อความเช่น:

"ข้อผิดพลาด: ไม่สามารถล็อก ref 'refs / remotes / origin / feature / branch_xxx': ได้ที่ 425ea23facf96f51f412441f41ad488fc098cf23 แต่คาดว่า 383de86fed394ff1a1aeefc4a522d886adcecd79"

จากนั้นในไฟล์ค้นหาแถวที่มี 'refs / remotes / origin / feature / branch_xxx' Guid จะมีที่คาดไว้ (ที่ 2) หนึ่ง - 383de86fed394ff1a1aeefc4a522d886adcecd79 คุณต้องเปลี่ยนเป็นจริง (ที่ 1) หนึ่ง - 425ea23facf96f51f412441f41ad488fc098cf23

ทำซ้ำสำหรับสาขาที่ล้มเหลวอื่น ๆ และคุณจะสามารถดำเนินการต่อได้ บางครั้งหลังจากดึงข้อมูลซ้ำฉันต้องทำซ้ำสำหรับสาขาเดิมที่ฉัน 'แก้ไข' ไว้ก่อนหน้านี้แล้ว ในการเรียก GIT อัปเดต guids และให้ข้อมูลล่าสุดแก่คุณ

อย่างไรก็ตามปัญหาไม่ใช่การหยุดการแสดง รายการสาขาได้รับการอัพเดท นี่เป็นคำเตือน


1

git สำหรับแต่ละอ้างอิง - รูปแบบ = 'ลบ% (refname)' อ้างอิง / ต้นฉบับ | git update-ref - stdin git reflog หมดอายุ - expire = ตอนนี้ - all git gc --prune = ตอนนี้


0

กรณีเดียวกันที่นี่ แต่ไม่มีอะไรเกี่ยวกับความคิดเห็นที่โพสต์ถูกต้องในกรณีของฉันฉันมีเพียงหนึ่งสาขา (หลัก) และใช้ระบบไฟล์ Unix เท่านั้นข้อผิดพลาดนี้เกิดขึ้นแบบสุ่มเมื่อฉันเรียกใช้ git fetch --progress --prune ต้นกำเนิด หรือ 'ต้นกำเนิด / ต้นแบบ' ไม่มีใครสามารถกระทำได้มีเพียง 1 ผู้ใช้ที่สามารถผลักดันได้

หมายเหตุ: ฉันมี submodule ในพื้นที่เก็บข้อมูล acme และ acme มีการเปลี่ยนแปลง submodule ใหม่ (คอมมิทใหม่) ฉันต้องทำการอัปเดต submodule ก่อนด้วย god submodule update

[2014-07-29 13:58:37] Payload POST received from Bitbucket
[2014-07-29 13:58:37] Exec: cd /var/www/html/acme
---------------------
[2014-07-29 13:58:37] Updating Git code for all branches
[2014-07-29 13:58:37] Exec: /usr/bin/git checkout --force master
[2014-07-29 13:58:37] Your branch is ahead of 'origin/master' by 1 commit.
[2014-07-29 13:58:37]   (use "git push" to publish your local commits)
[2014-07-29 13:58:37] Command returned some errors:
[2014-07-29 13:58:37] Already on 'master'
---------------------
[2014-07-29 13:58:37] Exec: /usr/bin/git fetch --progress --prune origin
[2014-07-29 13:58:39] Command returned some errors:
[2014-07-29 13:58:39] error: Ref refs/remotes/origin/master is at 8213a9906828322a3428f921381bd87f42ec7e2f but expected c8f9c00551dcd0b9386cd9123607843179981c91
[2014-07-29 13:58:39] From bitbucket.org:acme/acme
[2014-07-29 13:58:39]  ! c8f9c00..8213a99  master     -> origin/master  (unable to update local ref)
---------------------
[2014-07-29 13:58:39] Unable to fetch Git data

ในการแก้ปัญหานี้ (ในกรณีของฉัน) เพียงแค่เรียกใช้ git push ก่อนหากสาขาของคุณล้ำหน้า


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

0

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


0

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

ฉันแก้ไขได้โดยการลบสาขาในพื้นที่ของฉันจากนั้นตรวจสอบสาขาต้นทางgit checkout origin/my_branchแล้วดำเนินการgit checkout my_branch


-1

หลังจากค้นหาอย่างต่อเนื่องนี่เป็นวิธีการแก้ปัญหาที่ได้ผลสำหรับฉันซึ่งสร้างความไม่ได้ตั้งค่า / ลบ Upstream

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