Git ร้ายแรง: การอ้างอิงมีรูปแบบที่ไม่ถูกต้อง: 'refs / head / master


101

ฉันใช้Dropboxเพื่อซิงค์ที่gitเก็บ แต่ตอนนี้เมื่อฉันลองและpushฉันได้รับข้อผิดพลาด:

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

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

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

ฉันจะแก้ไขปัญหานี้ได้อย่างไร? ขอบคุณ.

คำตอบ:


178

ทำการสำรองข้อมูล repo ของคุณหากคุณไม่แน่ใจเกี่ยวกับอันนี้เนื่องจากคำสั่งเหล่านี้ไม่สามารถย้อนกลับได้

ก่อนอื่นไปที่ไดเรกทอรี repo ของคุณ

cd myrepo

จากนั้นค้นหาไฟล์ที่ขัดแย้งซ้ำแล้วลบทิ้ง

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

สุดท้ายลบการอ้างอิงที่ "ขัดแย้ง" ออกจากไฟล์การอ้างอิงที่บรรจุของ git

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs

1
ฉันมีปัญหาเดียวกันและสิ่งนี้ได้รับการแก้ไขให้ฉัน ขอบคุณ!
erik

สิ่งนี้แก้ไขให้ฉันด้วย ขอบคุณ!
cecconeurale

1
สำหรับผู้ใช้ macosfind . -type f -name "* conflicted copy*" -delete
Soyoes

42

ไฟล์ที่ขัดแย้งอาจอยู่ในหลาย ๆ ที่ฉันจะพิจารณา:

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

หรือคุณอาจดูทุกที่ใน.gitไดเรกทอรีย่อย:find . -name '*conflicted*'

หรือมิฉะนั้นให้แสดงรายการสาขาที่ใช้งานอยู่git branch -aและลบ ( git branch -d) สิ่งที่น่าสงสัย


มีไฟล์ที่ขัดแย้งกันอยู่ภายใน.git. ฉันผ่านไปและลบออกทั้งหมดและได้รับการแก้ไขแล้ว ขอบคุณ.
Justin

2
@ จัสตินดีใจที่ฉันช่วยได้ หากคำตอบนี้หรือคำตอบอื่นช่วยแก้ปัญหาของคุณได้โปรดทำเครื่องหมายว่ายอมรับ
Marco Leogrande

2
สำหรับ Mac OS X ให้ใช้: find . -name '*conflicted*'(แก้ไข: รูปแบบ)
xgMz

1
@xgMz ขอบคุณฉันจะอัปเดตคำตอบของฉันเนื่องจากโซลูชันของคุณมีความถูกต้องโดยทั่วไป
Marco Leogrande

1
ด้วยวิธีง่ายๆfindฉันได้ถือไฟล์ที่ขัดแย้งกันไฟล์เดียวและแก้ไขปัญหาด้วยตนเองด้วยสองmvไฟล์ การทำเช่นนี้อย่างช้าๆและใช้เหตุผลทีละขั้นตอนเป็นเส้นทางที่ปลอดภัยที่สุด
pid

8

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

ฉันแก้ไขมันง่ายๆ

เพิ่งลบสำเนาที่ขัดแย้ง (สำเนาที่ขัดแย้งกันของ XXXX yyyy-mm-dd)

และดึงตามปกติ.

โปรดทราบว่าเพื่อนร่วมงานของฉันมีการเปลี่ยนแปลงก่อนที่จะยุ่ง และเขาผลักดันการเปลี่ยนแปลงอีกครั้ง คราวนี้ไม่มีการปิดเครื่อง :)


1
ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน :) ขอบคุณ - สำหรับฉันดรอปบ็อกซ์ได้สร้างชื่อไฟล์สตริงแปลก ๆ ซึ่งเข้ากันไม่ได้กับ "อัปเดต"
cV2

1
สิ่งนี้ได้ผลสำหรับฉัน! มีไฟล์ที่มี "สำเนาที่ขัดแย้ง" ในชื่อในโฟลเดอร์ / refs / head และลบไฟล์นั้นออกจากนั้นดึง / พุชและทุกอย่างก็เรียบร้อยดี ขอบคุณ!
DiscDev

7

ฉันสามารถลบไฟล์ที่ขัดแย้งทั้งหมดออกจากโฟลเดอร์. git ของฉันได้ แต่ฉันยังคงได้รับข้อผิดพลาดเกี่ยวกับไฟล์ที่ไม่มีอยู่แล้ว

การแก้ไขสำหรับฉันคือการเปิด.git/refs/packed_refsและลบบรรทัดที่มีข้อความ "ขัดแย้งกัน"


1

สำหรับฉันมันให้ข้อผิดพลาด: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

คุณสามารถไปที่ไฟล์/.git/packed_refsและลบบรรทัดสำหรับrefs/tags/r0.2:3

จากนั้นก็เริ่มทำงาน แต่ทำไมมันถึงเกิดขึ้นในตอนแรกฉันไม่รู้


0

ลองgit checkout masterชิมสาขาสุขภาพดีที่มีชื่อดีก่อน


อัปเดตผลลัพธ์ในโพสต์ต้นฉบับ
Justin

หืมลองแบบเต็มgit push origin masterแล้ววางผลลัพธ์ของgit branch -aplease ได้ไหม
โผล่

เกิดข้อผิดพลาดเดียวกันที่นี่ ... การพยายามgit branch -aทำให้เกิดข้อผิดพลาดนี้!
trusktr

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

0

ฉันได้รับข้อผิดพลาดเดียวกัน

ร้ายแรง: การอ้างอิงมีรูปแบบที่ไม่ถูกต้อง: 'refs / head / somebranch (1)'

สำหรับคำสั่งต่อไปนี้

git branch

จากนั้นฉันค้นหาชื่อที่ผิดพลาด (ชื่อสาขาตามด้วย (1)) โดยใช้คำสั่ง

find . -name 'somebranch (1)'

และแสดงผลลัพธ์ดังต่อไปนี้

./.git/refs/heads/somebranch (1)

ซึ่งเป็นบางรุ่นที่ซ้ำกันของsomebranch IMO ดังนั้นฉันจึงลบสิ่งนี้ออกโดยเรียกใช้คำสั่ง find ตามด้วย delete

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

จากนั้นคำสั่ง branch ทำงานสำเร็จ

git branch

0

ฉันพบข้อผิดพลาดที่คล้ายกันเช่น

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

เพียงแค่ลบไฟล์.git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)ในที่เก็บ Dropbox ระยะไกลก็ช่วยแก้ปัญหาได้

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