Git fatal: Referensi memiliki format yang tidak valid: 'refs / heads / master

101

Saya menggunakan Dropboxuntuk menyinkronkan gitrepositori, tetapi sekarang ketika saya mencoba dan pushsaya mendapatkan kesalahan:

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

Jadi, sepertinya Dropbox mendeteksi konflik dan membuat salinannya. Oke, tidak masalah, jadi saya menghapus file yang bentrok. Tetap saja, mendapatkan kesalahan git di atas.

$ 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`

Bagaimana cara memperbaikinya? Terima kasih.

Justin
sumber

Jawaban:

178

buat cadangan repo Anda jika Anda tidak yakin tentang yang ini, karena perintah ini tidak dapat diubah.

pertama, buka direktori repo Anda.

cd myrepo

kemudian secara rekursif mencari file yang konflik dan menghapusnya

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

terakhir, hapus semua referensi yang "berkonflik" dari file paket-refs git

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs
Jalur
sumber
1
Saya memiliki masalah yang sama dan ini memperbaikinya untuk saya. Terima kasih!
erik
Ini memperbaikinya untuk saya juga. Terima kasih!
cecconeurale
1
untuk pengguna macosfind . -type f -name "* conflicted copy*" -delete
Soyoes
42

File yang konflik bisa berada di banyak tempat, saya akan memeriksa:

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

Atau Anda mungkin mencari di mana-mana di .gitsubdirektori:find . -name '*conflicted*'

Atau, jika tidak, daftarkan cabang aktif dengan git branch -adan hapus ( git branch -d) sesuatu yang mencurigakan.

Marco Leogrande
sumber
Ada file yang konflik di mana-mana di dalam .git. Saya memeriksa dan menghapus semuanya, dan itu diperbaiki. Terima kasih.
Justin
2
@Jin Senang bisa membantu. Jika jawaban ini atau jawaban lainnya menyelesaikan masalah Anda, tandai sebagai diterima.
Marco Leogrande
2
Di Mac OS X, gunakan: find . -name '*conflicted*'(Edit: format)
xgMz
1
@xgMz Terima kasih, saya akan memperbarui jawaban saya, karena solusi Anda memiliki validitas umum.
Marco Leogrande
1
Dengan sederhana findsaya mendapatkan satu file yang konflik dan secara manual memperbaiki masalah dengan dua file mv. Melakukan ini secara perlahan dan menalar langkah demi langkah adalah cara teraman.
pid
8

Ini juga terjadi pada tim kami ketika kolega saya mendorong perubahannya dan mematikan PC sebelum Dropbox diperbarui.

Saya menyelesaikannya dengan sangat sederhana.

Baru saja menghapus salinan yang bentrok. (Salinan yang konflik XXXX tttt-bb-hh)

Dan tarik secara normal.

Perhatikan bahwa kolega saya mengalami perubahan sebelum mengacaukannya. Dan dia mendorong perubahannya lagi. Kali ini tidak ada shutdown. :)

Hareen Laks
sumber
1
bekerja sangat sempurna untuk saya :) thx - bagi saya dropbox membuat beberapa nama file string aneh yang tidak kompatibel dengan "update"
cV2
1
Ini berhasil untuk saya! Ada file dengan "salinan konflik" pada namanya di folder / refs / heads dan menghapusnya, lalu tarik / dorong dan semuanya baik-baik saja. Terima kasih!
DiscDev
7

Saya dapat menghapus semua file yang konflik dari folder .git saya, tetapi saya terus mendapatkan kesalahan tentang file yang sudah tidak ada lagi.

Perbaikan bagi saya adalah membuka .git/refs/packed_refsdan menghapus baris yang berisi teks "bentrok".

Drew
sumber
1

Bagi saya itu memberikan kesalahan: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Anda dapat pergi ke file /.git/packed_refs dan menghapus baris untukrefs/tags/r0.2:3

Kemudian itu mulai bekerja. Tapi kenapa itu terjadi? Aku tidak tahu.

Rajesh Paul
sumber
0

Cobalah yang git checkout masterpertama untuk mendapatkan cabang yang sehat dan terkenal.

menyodok
sumber
Output yang diperbarui di postingan asli.
Justin
Hm, bisakah Anda mencoba penuh git push origin master, dan juga menempelkan outputnya git branch -a?
aduk
Kesalahan yang sama di sini ... mencoba git branch -amenghasilkan kesalahan ini!
trusktr
Masalahnya ada pada repositori jarak jauh, jadi menarik atau memeriksa tidak menyelesaikannya. Jawaban lain di atas mengacu pada memperbaiki file secara langsung di remote dan bekerja dengan sempurna. SARAN ANDA SANGAT BAIK tetapi itu bukan jawaban untuk masalah.
pid
0

Saya mendapatkan kesalahan yang sama

fatal: Referensi memiliki format yang tidak valid: 'refs / heads / somebranch (1)'

untuk perintah berikut

git branch

Kemudian, saya mencari nama yang salah (nama cabang diikuti dengan (1)) menggunakan perintah

find . -name 'somebranch (1)'

Dan itu menunjukkan hasil sebagai berikut

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

Yang merupakan versi duplikat dari beberapa IMO cabang . Jadi, saya menghapus ini dengan menjalankan perintah find yang diikuti dengan delete

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

Kemudian perintah cabang berjalan dengan sukses

git branch
zeeawan
sumber
0

Saya menemukan kesalahan serupa seperti

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

Hanya dengan menghapus file .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)di repositori Dropbox jarak jauh memang menyelesaikan masalah.

Sithu
sumber