Відповіді:
Я не розумію наслідків цього, але, як це запропоновано в цій темі , коли я стикався з цим, я просто робив це
$ mv .git/refs/remotes/origin/HEAD /tmp
(тримати його на всякий випадок) і потім
$ git gc
працювали, не нарікаючи; Я не стикався з жодними проблемами.
git prune
працював для мене, спосіб видалити дані, накопичені в Git, але на які не посилається нічого корисного.
$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
працювало для мене
Проблема, з якою я зіткнувся (це та сама проблема, про яку згадував @Stavarengo в цьому коментарі вище), полягає в тому, що віддалену гілку за замовчуванням ( develop
у моєму випадку) було видалено, але вона все ще посилалася на.git/refs/remotes/origin/HEAD
.
Відкриття .git/refs/remotes/origin/HEAD
в моєму редакторі показало це:
ref: refs/remotes/origin/develop
Я ретельно відредагував це, щоб вказати на мою нову гілку за замовчуванням, і все було добре:
ref: refs/remotes/origin/master
Підказка, яка мене підкакала, - це те, що біг git prune
показав цю помилку:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
Побачивши відповідь Трентона, я подивився на мою .git/refs/remotes/origin/HEAD
і побачив, що вона також вказує на стару гілку, яку тепер видалено.
Але замість редагування файлу я спробував рішення Райана:
git remote set-head origin --auto
Він автоматично встановив файл у нову гілку, і git gc
добре працював після цього.
git remote set-head $REMOTE --auto
у моєму випадку $ REMOTE - це віддалений псевдонім, а не "початкове" за замовчуванням, оскільки у мене є кілька віддалених налаштувань.
Я думав, що рішення було таким, оскільки це, здавалося, спрацювало, але виявляється, що насправді не вирішує проблему.
git remote set-head origin --auto
git prune
(як це було рекомендовано у першому виведенні команди), тому я не в змозі точно сказати, що мені допомогло - перше, друге чи те й інше.
git remote set-head origin --auto
виправили мої реф. / видалення / походження / HEAD файл, не використовуючи менеgit prune
error: Multiple remote HEAD branches. Please choose one explicitly
і мені довелося скористатися git remote set-head origin mybranch
(поки відділення "mybranch" виходило з каси), щоб помилка вийшла з ладу.
Схоже, ваші символічні відмови можуть бути зламані ... Спробуйте замінити його на вашу гілку за замовчуванням так: Наприклад, моя гілка за замовчуванням є головним
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
Це повинно це виправити.
Причиною цього для мене була робота в стиснутій папці в Windows. Коли папка була нестиснута, вона пошкодила файли пакету, каскадуючи інші незвичайні проблеми, такі як неможливість обрізання неіснуючих гілок.
Єдиним виправленням було стерти робочий каталог та знову клонувати репо-дистанційні (-и). На щастя, я все-таки могла натискати та витягувати оновлення, щоб нічого не втрачено. Зараз все добре.
master
на іншу, що називаєтьсяdevelop
. За кілька днів до того, як я поверну його назадdevelop
до,master
і я видалив стару гілку за замовчуваннямdevelop
, але в моєму робочому каталозі файл.git/refs/remotes/origin/HEAD
все ще вказував наrefs/remotes/origin/develop
який більше не існує. У цій ситуації видалення файлу спрацювало.