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 действительно устранило проблему.