Git репозиторий потерял свои удаленные ветки?

У меня есть репозиторий git с удаленной настройкой ( "git fetch" ), но у него нет удаленных ветвей: папка ".git/refs/remotes" не существует, и

git branch -r 

ничего не возвращает (пустой список, без ветвей). Однако фактический удаленный репозиторий имеет ветвь. Если я повторно клонирую удаленное репо, я получаю другое местное репо, у которого есть удаленные ветки.

Я не думал, что это состояние возможно. Мои вопросы:

  • Как я попал в это состояние?
  • Есть ли команда, которую можно запустить, чтобы вернуть ".git/refs/remotes" обратно? (за исключением нового клона, который я уже сделал).

Дополнительная информация

"git config --get remote.origin.fetch" пуст (то есть команда не производит вывод)

"git источник удаленного шоу" показывает

$ git remote show origin
* remote origin
  Fetch URL: <correct remote url here>
  Push  URL: <correct remote url here>
  HEAD branch: master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Ответ 1

[Редактировать, апрель 2017]. Если вы создали свой оригинальный клон с --single-branch, это будет проблема с настройкой remote.origin.fetch. Если вы использовали предел --depth, это также означает --single-branch. Восстановите нормальное значение remote.origin.fetch, описанное ниже, и вы получите более полный клон.


Обычно просто запуск git fetch должен восстанавливать ветки удаленного отслеживания.

Если git fetch не восстанавливает их, то я задаюсь вопросом: что идет git config --get-all remote.origin.fetch print? (Предполагается, что пульт называется origin, если нет, замените фактическое имя.) Он должен быть установлен на +refs/heads/*:refs/remotes/origin/* (опять же, если принять имя origin). Специальные случаи (например, извлечение заметок) могут добавить больше строк.

Ответ 2

Это решило мою проблему

git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

Когда я запускаю vi .git/config, я теряю строку выборки:

fetch = +refs/heads/*:refs/remotes/origin/*