Відповіді:
Я не розумію наслідків цього, але, як це запропоновано в цій темі , коли я стикався з цим, я просто робив це
$ 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який більше не існує. У цій ситуації видалення файлу спрацювало.