ข้อผิดพลาด Git บน git pull (ไม่สามารถอัปเดตการอ้างอิงภายในเครื่อง)


126

ฉันมีเฉพาะสาขาหลักและฉันได้รับข้อผิดพลาดนี้ทุกครั้งที่พยายาม "git pull":

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

และเมื่อฉันทำ "git pull origin master" ฉันจะได้รับ:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

ฉันค้นหา แต่ไม่พบสาเหตุ


2
ที่เก็บในเครื่องอยู่ที่ไหน คุณสร้างเป็นผู้ใช้ที่แตกต่างจากที่คุณใช้เพื่อดำเนินการดึงหรือไม่? ดูเหมือนปัญหาการอนุญาตไฟล์
tpg2114

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

กรุณา @ tpg2114 เพิ่มสิ่งนี้เป็นคำตอบในการเลือก
user115561

คำตอบ:


283

ฉันและทีมงานพบข้อผิดพลาดนี้ไม่สามารถอัปเดตการอ้างอิงในพื้นที่เมื่อทำการดึง SourceTree

เราใช้:

git gc --prune=now

ซึ่งจะลบวัตถุอ้างอิงที่ซ้ำกันซึ่งควรแก้ไขปัญหานี้

นี่คือลิงค์บางส่วนที่คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการอ้างอิง git และการตัดแต่ง :

คอมไพล์เคล็ดลับประจำสัปดาห์

เอกสาร git-prune

การอ้างอิง git


1
ทำงานให้ฉันด้วยเช่นกันข้อความเดียวกัน Sourcetree บน Windows 7
James Westgate

2
เพิ่งเริ่มมีปัญหานี้เช่นกัน ขอบคุณมาก! ทำงานได้อย่างสมบูรณ์แบบ!
ddrossi93

3
อาจต้องใช้ทั้งสองคำสั่งนี้: git gc --prune=now git remote prune originจากstackoverflow.com/questions/2998832/…
bryan

1
ฉันลองgit remote prune originแล้วมันไม่ได้ผลสำหรับฉัน แต่หลังจากนั้นลองทำตามนี้git gc --prune=nowและได้ผล! ไม่แน่ใจว่าจำเป็นทั้งสองอย่างในลำดับนั้นหรือเฉพาะอันนี้
Anurag

1
ปัญหาที่เป็นความลับอีกประการหนึ่งgitที่นำไปสู่โพสต์ StackOverflow ที่เป็นประโยชน์พร้อมด้วยโซลูชันสั้น ๆ
ijoseph

144

ฉันแก้ไขดังนี้:

git remote prune origin


6
ยูเรก้า! มันได้ผลจริง มีบางอย่างที่เกี่ยวข้องกับการเปลี่ยนชื่อสาขาระยะไกลหรือบางสิ่งบางอย่าง ฉันจะไม่พยายามอธิบาย
TheSoftwareJedi

8
สิ่งนี้ทำเพื่อฉันgit gc --prune=nowไม่ได้ทำอะไรเลย
Josh G

3
เหมือนกัน. สิ่งนี้ใช้ได้กับฉัน git gc --prune = ตอนนี้ไม่ได้ผลสำหรับฉัน
Tony

โซลูชันนี้ทำงานได้อย่างน่าอัศจรรย์ในการแก้ไขข้อผิดพลาด: ไม่สามารถล็อคการอ้างอิงไม่สามารถอัปเดตปัญหา
localref ได้

22

ด้วยคำสั่งบรรทัด gitbach ใช้git update-refเพื่ออัปเดตการอ้างอิงของสาขาในพื้นที่ของคุณ:

$ git update-ref -d refs/remotes/origin/[locked branch name]

จากนั้นดึงโดยใช้ $ git pull

[locked branch name] เป็นชื่อของสาขาที่เกิดข้อผิดพลาดเนื่องจากรหัสคอมมิตไม่ตรงกัน


15

ลองใช้คำสั่งนี้ในโฟลเดอร์รูทที่เก็บ git ของคุณ:

rm .git/logs/refs/remotes/origin/master 

โฟลเดอร์นี้อยู่ที่ไหนใน Windows
Kolob Canyon

เจอแล้ว. เป็นไดเร็กทอรีใดก็ตามที่คุณโคลน
Kolob Canyon

12

ฉันค้นพบข้อความแสดงข้อผิดพลาดเดียวกันกับที่พยายามดึงจาก Bitbuck Repo ไปยังสำเนาโลกัลของฉัน นอกจากนี้ยังมี Branche Master เพียงคนเดียวและคำสั่งgit pull origin masterนำไปสู่ข้อความแสดงข้อผิดพลาดนี้

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

แนวทางแก้ไขดังนี้

  1. git reflog ค้นหาหมายเลขของการกระทำล่าสุด
  2. git reset --hard <numnber> รีเซ็ตเป็นคอมมิตสุดท้าย
  3. git pull origin master ดึงอีกครั้งโดยไม่มีข้อผิดพลาด


8

ตรวจสอบให้แน่ใจว่าผู้ใช้ที่รันgit pullเป็นผู้ใช้เดียวกันกับที่สร้างที่เก็บ สิทธิ์ของไฟล์ไม่ถูกต้อง


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

ฉันเห็นด้วยกับสิ่งนี้ตรวจสอบว่าเจ้าของและกลุ่มตั้งค่าเป็นผู้ใช้ที่ต้องการดึง ".git" repo (เกิดขึ้นหากคุณดึงสาขาที่เป็น "root") "sudo chown -R" ได้ผลในกรณีของฉัน
jo_


2

สิ่งนี้เกิดขึ้นกับฉันบน OSX ซึ่งฉันใช้ระบบไฟล์ที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ อย่างไรก็ตามนักพัฒนารายอื่นผลักดันสาขาที่มีชื่อเดียวกัน แต่ต่างกรณี: My-Branchvsmy-branch VS

ฉันได้My-Branchเช็คเอาต์แล้วและได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงในเครื่อง" เมื่อฉันดึงข้อมูลอาจเป็นเพราะระบบไฟล์คิดว่าMy-Branch==my-branch ==

เนื่องจากเราใช้ Github ฉันสามารถแก้ปัญหาได้โดยการลบหนึ่งในสาขาผ่าน GUI ของ Github


ในกรณีของฉันทั้งสองสาขาที่ขัดแย้งกันเป็นของผู้ใช้รายอื่นดังนั้นฉันจึงไม่สามารถลบออกได้ แต่ฉันลบไฟล์อ้างอิงสาขาภายใต้. git \ refs \ remotes และแก้ไขแล้ว (ชั่วคราว - ปัญหาจะกลับมาทุกครั้งที่ฉันดึงจนกว่าผู้ใช้รายอื่นจะลบหนึ่งในสาขาของเขา)
Jana Mandic

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

2

นี่อาจเป็นสถานการณ์ที่เฉพาะเจาะจงมาก แต่: ฉันใช้ Windows ใน Parallels VM บน MacBook Pro โดยที่ repos ในเครื่องของฉันเก็บไว้ในดิสก์ของ VM ซึ่งแชร์กับ macOS

หากฉันเปิดไฟล์ในแอพ Mac จาก repo ที่อยู่บน Windows VM บางครั้งฉันได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงในเครื่อง" วิธีแก้ไขเมื่อเกิดเหตุการณ์นี้คือเพียงแค่ปิดไฟล์หรือออกจากแอพ Mac


นี่คือสถานการณ์ของฉัน ฉันเปิดไฟล์ใน vs-code และพยายามคอมมิตโดยใช้ visual studio ใน Parallels VM การปิด VSCode แล้วทำการดึงคอมไพล์ทำงานได้อย่างสมบูรณ์ ขอบคุณสำหรับการแบ่งปัน.
Brad

2

เกิดอะไรขึ้นที่นี่? การอ้างอิงท้องถิ่นไปยังสาขาระยะไกลของคุณมีการเปลี่ยนแปลงและด้วยเหตุนี้เมื่อคุณเรียกใช้git pullgit ไม่พบสาขาระยะไกลที่เกี่ยวข้องและด้วยเหตุนี้จึงล้มเหลว

git remote prune origin

ทำความสะอาดการอ้างอิงในพื้นที่นี้จริงแล้วเรียกใช้ git pullอีกครั้ง

คำแนะนำ - โปรดใช้--dry-runตัวเลือกเพื่อความปลอดภัย


1

ข้อผิดพลาดเกี่ยวกับ (ไม่สามารถอัปเดตการอ้างอิงภายในเครื่อง) อาจเกิดขึ้นได้หากคุณเพิ่งเปลี่ยนรหัสผ่านเมื่อเร็ว ๆ นี้และมีบางสิ่งที่น่าสนใจที่รวมการเข้าสู่ระบบ Windows และ Linux ของคุณ


1

การพูดจากผู้ใช้พีซี - รีบูต

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


1

ฉันมีข้อผิดพลาดเดียวกันฉันกำลังอัปเดตจากภายใน Eclipse และฉันได้รับข้อผิดพลาดมากมาย ดังนั้นฉันจึงลองอัปเดตจากหน้าต่างคำสั่ง DOS และพบปัญหาเดียวกัน

จากนั้นฉันลองใช้วิธีแก้ปัญหา "git gc --prune = now" สิ่งนี้ให้ข้อความว่าไฟล์ถูกล็อคในไดเรกทอรีอ้างอิง

Eclipse ต้องมีการล็อกบางอย่างในไดเร็กทอรี "refs"
วิธีแก้ปัญหาที่ฉันพบคือเพียงแค่ปิด Eclipse จากนั้นฉันอัปเดตที่เก็บจาก DOS ด้วยคำสั่ง "git PULL" และทุกอย่างก็ทำงานได้ดี


1

สิ่งที่ได้ผลสำหรับฉันคือ:

git config --global fetch.prune true

ตอนนี้มันยังคงทำงานพรุนโดยอัตโนมัติ


0

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


0

งานนี้สำหรับฉัน

rm .git/logs/refs/remotes/origin/master 

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

0

ลบไฟล์. git / logs / refs / remotes / origin / [Locked Branch Name]


1
ฉันสงสัยว่าสิ่งนี้จะช่วย - หรือแม้กระทั่งได้ผลเลย หากต้องการโน้มน้าวฉันเป็นอย่างอื่นโปรดเพิ่มคำอธิบายว่าสิ่งนี้ควรทำงานอย่างไรและทำไมจึงควรช่วยแก้ปัญหา การเน้นความแตกต่างให้กับคำตอบอื่น ๆ ที่มีอยู่เดิมดูเหมือนจะเป็นโบนัส โดยเฉพาะอย่างยิ่งการโหวตโดย Babak
Yunnosch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.