Git fatal: Посилання має недійсний формат: 'refs / heads / master


101

Я використовую Dropboxдля синхронізації gitсховища, але тепер, коли я намагаюся, pushя отримую помилку:

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

Отже, схоже, що Dropbox виявив конфлікт і створив копію. Гаразд, немає проблем, тому я видалив конфліктний файл. Але все-таки отримання вищезгаданої помилки git.

$ 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

зробіть резервну копію репо, якщо ви не впевнені в цьому, оскільки ці команди незворотні.

спочатку перейдіть до свого каталогу репо.

cd myrepo

потім рекурсивно шукайте конфліктні файли та видаляйте їх

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

нарешті, видаліть усі "конфліктні" посилання з файлу git's pack-refs

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

1
У мене було те саме питання, і це було вирішено для мене. Дякую!
Ерік

Це зафіксувало і для мене. Дякую!
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. Я пройшов і видалив їх усіх, і це виправлено. Дякую.
Джастін

2
@Justin Радий, що можу допомогти. Якщо ця відповідь чи будь-хто інший вирішив вашу проблему, позначте її як прийняту.
Марко Леогранде

2
На Mac OS X використовуйте: find . -name '*conflicted*'(Редагувати: формат)
xgMz

1
@xgMz Дякую, я оновлю свою відповідь, оскільки ваше рішення має загальну силу.
Марко Леогранде

1
За допомогою простого findя дістався одного конфліктуючого файлу і вручну виправив проблему з двома mv. Робити це повільно і міркувати крок за кроком - це найбезпечніший шлях.
pid

8

Це трапляється і з нашою командою, коли мій колега натискає на зміни та вимикає ПК перед тим, як Dropbox оновлюється.

Я вирішив це так просто.

Щойно видалили конфліктну копію. (Суперечлива копія XXXX гггр-мм-дд)

І потягніть його нормально.

Зауважте, що мій колега змінив перед тим, як зіпсувати. І він знову підштовхує свої зміни. Цього разу відключення немає. :)


1
працював абсолютно ідеально для мене :) thx - для мене Dropbox створив якесь дивне ім'я файлу рядка, яке було не сумісне з "оновленням"
cV2

1
Це працювало для мене! У папці / refs / heads з'явився файл із "конфліктною копією" в імені та видаленням цього, потім потягніть / натисніть і все добре. Дякую!
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спочатку потрапити на здорову, добре названу гілку.


Оновлений вихід в оригінальній публікації.
Джастін

Гм, ви можете спробувати повний git push origin master, а також вставити вихід, git branch -aбудь ласка?
ткнути

Тут git branch -aтака ж помилка ... спроба результатів саме цієї помилки!
trusktr

Проблема знаходиться у віддаленому сховищі, тому витягнення або перевірка не вирішує її. Інші відповіді вище стосуються виправлення файлів безпосередньо на пульті та працюють бездоганно. ВАША РОЗВИТКА ДУЖЕ ДОБРО, але це не відповідь на проблему.
pid

0

Я отримував таку ж помилку

fatal: Посилання має недійсний формат: 'refs / heads / somebranch (1)'

для наступної команди

git branch

Потім я здійснив пошук помилкового імені (назва гілки, а потім (1)) за допомогою команди

find . -name 'somebranch (1)'

І показав такий результат

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

Яка є копія версії деякого галузевого ІМО. Отже, я видалив це, виконавши команду find, наступну за видаленням

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

Тоді команда гілки успішно запускається

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 вирішила проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.