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 {} \;

наконец, удалите все "конфликтующие" ссылки из файла pack-refs git

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
@ Джастин Рад, что смог помочь. Если этот или любой другой ответ помог решить вашу проблему, отметьте его как принятый.
Марко Леогранде

2
В Mac OS X используйте: find . -name '*conflicted*'(Edit: format)
xgMz

1
@xgMz Спасибо, я обновлю свой ответ, так как ваше решение имеет общую силу.
Марко Леогранде

1
С помощью простого findя получил один конфликтующий файл и вручную решил проблему с двумя mv. Делать это медленно и рассуждать шаг за шагом - самый безопасный путь.
pid

8

Это также происходит с нашей командой, когда мой коллега отправляет свои изменения и выключает компьютер до обновления Dropbox.

Я так просто решил.

Просто удалил конфликтующую копию. (Конфликтная копия XXXX гггг-мм-дд)

И тянет нормально.

Обратите внимание, что мой коллега внес изменения до того, как испортился. И он снова продвигает свои изменения. На этот раз без выключения. :)


1
работал абсолютно идеально для меня :) thx - для меня dropbox создал странную строку с именем файла, которая не была совместима с "update"
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 01

Проблема находится в удаленном репозитории, поэтому извлечение или извлечение не решают ее. Другие ответы выше относятся к прямому исправлению файлов на пульте дистанционного управления и отлично работают. ВАШ СОВЕТ ОЧЕНЬ ХОРОШИЙ, но это не ответ на проблему.
pid

0

У меня такая же ошибка

фатальный: ссылка имеет недопустимый формат: 'refs / Heads / somebranch (1)'

для следующей команды

git branch

Затем я поискал ошибочное имя (имя ветки, за которым следует (1)), используя команду

find . -name 'somebranch (1)'

И он показал следующий результат

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

Это какая-то дублированная версия какой-то ветки IMO. Итак, я удалил это, выполнив команду 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.