Git фатальный: ссылка имеет недопустимый формат: 'refs/heads/master

Я использую Dropbox для синхронизации репозитория git, но теперь, когда я пытаюсь и push, я получаю сообщение об ошибке:

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro 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 conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

Как я могу это исправить? Спасибо.

Ответ 1

создайте резервную копию своего репо, если вы не уверены в этом, потому что эти команды необратимы.

сначала перейдите в каталог репозиториев.

cd myrepo

затем рекурсивно искать конфликтующие файлы и удалять их

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

Наконец, удалите любые "конфликтующие" ссылки из файла git упакованный ref ref

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

Ответ 2

Конфликтный файл может быть в нескольких местах, я бы посмотрел на:

.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) что-нибудь подозрительное.

Ответ 3

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

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

Просто удалите конфликтующую копию. (XXXX противоречивая копия yyyy-mm-dd)

И потяните его в обычном режиме.

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

Ответ 4

Мне удалось удалить все конфликтующие файлы из моей .git-папки, но я продолжал получать ошибки о файлах, которые больше не существовали.

Исправление для меня открывало .git/refs/packed_refs и удаляло строки, содержащие текст "конфликтует".

Ответ 5

Сначала попробуйте git checkout master, чтобы попасть в здоровую, хорошо названную ветвь.

Ответ 6

Я получал ту же ошибку

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

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

git branch

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

find . -name 'somebranch (1)'

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

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

Какая-то дублированная версия somebranch IMO. Таким образом, я удалил это, выполнив команду find после удаления

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

Затем команда ветвления успешно выполняется

git branch

Ответ 7

Для меня это давало ошибку: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Вы можете перейти к файлу /. git/packaging_refs и удалить строку для refs/tags/r0.2:3

Затем он начал работать. Но почему это произошло в первую очередь, я не знаю.

Ответ 8

Я столкнулся с подобной ошибкой, такой как

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

Простое удаление файла .git/refs/heads/user-search-api (Sithu conflicted copy 2016-01-08) в удаленном репозитории Dropbox действительно устранило проблему.