Мой компьютер отключился, и теперь один из моих репозиториев git сломан. Когда я пытаюсь проверить мастер, он говорит мне:
warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting
Когда я выполняю git stash
, я получаю:
fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet
Итак... что я могу сделать?
Обновление
Вывод git reflog
:
fatal: bad default revision 'HEAD'
Не очень многообещающий... Вывод git fsck
:
error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt
Ответ 1
Мне удалось восстановить:
rm .git/refs/remotes/origin/HEAD
git fetch --all
Ответ 2
Начните с выполнения шагов, предложенных в Восстановление сломанного репозитория git:
- проверьте, содержит ли
.git/refs
что-нибудь полезное
- проверьте
git reflog
и не получив содержимое .git/logs/refs/heads/master
или любой другой ветки, на которой вы были последними
- запустите
git fsck
, возможно с помощью --unreachable
или --lost-found
Это, мы надеемся, позволит вам выяснить, что должно быть для master
ref, чтобы вы могли его восстановить (т.е. верьте SHA1 в .git/refs/heads/master
).
В случае, если какой-либо объект, содержащийся в этом коммите, действительно поврежден, вы не можете восстановить ваш HEAD
код, к сожалению. Предполагая, что ваше рабочее дерево и/или индекс не повреждены, вы можете попробовать git reset --soft
(или с ошибкой git reset
) предыдущей фиксации, а затем повторно выполнить фиксацию. Избегайте любых операций, которые меняют рабочее дерево s.a. git checkout -f
или git reset --hard
.
Ответ 3
У меня была аналогичная проблема после синего экрана смерти на окнах 8.1
У меня был файл в этом месте...
C:\www\<project>\.git\refs\remotes\origin\<problem-branch>
И он был пуст, тогда как другие файлы ветки в этой папке имеют длинные строки внутри них.
NB У меня не было никаких изменений/фиксаций
- Я создал резервную копию файла
<problem-branch>
- Удаленный файл
-
git fetch --all
, чтобы получить ветвь снова
Затем автозаполнение вкладки снова заработало
Ответ 4
Если не так много измененных файлов, я думаю, что для решения этой проблемы можно выполнить следующие действия:
- резервное копирование файлов, измененных в репо
- удалить существующее репо
- повторно клонировать его с сервера
- вставьте файлы с шага 1 в репо и
git commit -a
Ответ 5
У меня была такая же проблема, но не повезло, я не мог понять эту проблему.
Я взял свое репо в сторону, повторно клонировал его с сервера и попытался слиться между ними. Конечно, он показал много файлов, не связанных с моей веткой, но помог изолировать необходимые файлы.
Ответ 6
Убедитесь, что MSWindows создала файлы desktop.ini, которые поддерживают git? это для меня. Как только я удалю их все во вложенных папках каталога .git, он работает.
Ответ 7
У меня возникла такая же проблема, когда Android Studio внезапно прекратилась (из-за потери питания компьютера).
Я решил его, скопировав содержимое моего файла C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\master
в файл C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master
.
(Раньше я также включил опцию "Force Push" в Android Studio, но я не думаю, что это был необходимый шаг.)
Примечание:
Я нашел это решение, сравнив содержимое файлов в каталоге C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\
(вложенные подкаталоги) с соответствующими файлами в другом здоровом проекте - например, C:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\
.
У вас может быть другой файл, который поврежден, но, сравнивая его с другим здоровым проектом, вы должны быстро определить, что не так.
Если у вас нет другого здорового проекта с настройкой git, может быть, стоит создать простой, так же, как вы создали свой сломанный проект, чтобы он мог исследовать, сравнивать и исправлять и т.д.
PS - Мое сообщение об ошибке (отредактировано) было: warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --
Ответ 8
Я знаю, что это слишком поздний ответ, но я получал эту ошибку, потому что у меня не было origin/head
. Вы можете найти это, выполнив git branch -r
. Если вы не видите ваш origin/head
, указывающий на удаленное начало, вы можете установить это, запустив git remote set-head origin {{your branch name}}
.
Теперь запустите git branch -r
снова, и вы увидите что-то вроде этого:
origin/HEAD -> origin/develop
Я надеюсь, что это поможет кому-то еще, кто сталкивается с этой проблемой.
Ответ 9
Я не смог проверить свою основную ветку из-за невозможности блокировки ошибки ref. В итоге я удалил:
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
и вызов этой команды git:
git fetch --all
Ответ 10
После вычисленного замораживания и сбоя моя ветвь git была повреждена сообщением:
git fatal: your current branch appears to be broken
. Я ничего не мог сделать.
После выполнения git fsck
упомянул, что ветвь имела error: Invalid HEAD
.
refs/heads/<branch>
имел invalid sha1 pointer
.
После выполнения следующих параметров я открыл .git/refs/heads/<branch>
в редакторе notepad ++, и каждый из символов sha1 был NUL
.
К счастью, мне понадобилось только reset ветвь в удаленное состояние, и это было на реплике bitbucket. Я схватил sha1 с наконечника удаленного репо и скопировал его в .git/refs/heads/<branch>
, сохранил его, затем сделал git reset --hard HEAD
, и все вернулось в нормальное состояние.
Ответ 11
Я был идиотом, чтобы забыть проталкивать, а мой компьютер разбился во время совершения фиксации.
Я мог бы восстановить все, кроме последнего, хотя, открыв
.git/журналы/ссылки/главы/
Этот файл содержит все коммиты (со своими SHA) для ветки, что я сделал для восстановления:
- Резервное копирование последних изменений во временную папку
- перейти к "чистому сланцу"
-
git checkout master
-
git reset --hard
- проверить второе и последнее фиксацию в журнале
- создать ветку из этой отдельной головы
- PUSH
- Восстановить последние изменения
- Повторите попытку
Таким образом, даже если вы совершите туманную ошибку, вы не сразу возвращаетесь на целый день работы с помощью git:)