■ space · зонд прогулки · fig 1

Git поднимается по дереву в поисках .git, останавливается на первой — пять вещей ломают эту охоту, одна команда их разводит.

■ сначала ответ

Запустите git rev-parse --show-toplevel || ls -a — одна команда разводит причины раньше, чем вы что-то тронете.

Корень напечатан → вы стоите снаружи репозитория; cd там ничего. Нет .git в ls -a → репозитория никогда не было: переклонируйте, не git init.

Ошибка в каждом репозитории машины → экспортирован GIT_DIR ; unset GIT_DIR.

5причин за одной строкой fatal
1команда их разводит
20минут стоит фантазия про папку-выше

01ПРОГУЛКА

git охотится за одной записью, вверх, и останавливается на первой — машина переигрывает охоту

РИС 1 · ЗОНД ПРОГУЛКИклавиши 1–6 — или кнопки
цель worktreeперенесена · удаленаsrc/api/F1myapp/F2projects/F3home/you/F4.git.gitGIT_DIR=/some/old/pathВЫПРОГУЛКА← вы набрали git pull здесь
зонд
$ git rev-parse --show-toplevel
/home/you/projects/myapp

НАЙДЕНО — ПРОГУЛКА ОСТАНОВИЛАСЬ НА .GITремонт — чинить нечего: прогулка здорова

СТАРТ src/api/ · ЭТАЖЕЙ ПРОЙДЕНО 2 · ВЕРДИКТ НАЙДЕНО

вы здесь → вы набрали git pull здесь → прогулка останавливается здесь, на первом встреченном .git

02ТАБЛИЦА ПРИЧИН

пять вещей ломают охоту — сопоставьте симптом со строкой

симптомвероятная причинаремонт
ошибка в одном проекте, ls -a не показывает .gitскачивание ZIP / скопированные файлыgit clone вообще
ошибка из подпапки, корень работаетстоите снаружи дереваcd "$(git rev-parse --show-toplevel)"
ошибка в каждом каталоге, даже в тех, что работалиGIT_DIR экспортированunset GIT_DIR, вычистите его из профиля shell
ошибка внутри папки submodulesubmodule не инициализированgit submodule update --init --recursive
.git — файл, ошибка остаётсявисящий указатель worktree/submodulegit worktree repair, иначе переклонируйте

проверка: git rev-parse --show-toplevel → путь к корню репозитория, без ошибки

03ПЕРВЫЕ ДВЕ ЛГУТ

таблица чинит симптомы; первые две причины — там, где лжёт моторная память

форма подпапки—вы сделали cd в docs/ или src/api/ и привычка shell говорит, что корень здесь — git поднимается, не находит ничего, бросает
форма клона—git clone всегда создаёт подпапку с именем репозитория — checkout лежит уровнем ниже, чем там, где вы стоите
форма zip—Code → Download ZIP отправляет только снепшот исходников: без .git, без истории, без remote
форма копии—файлы скопированы без скрытой папки — чистильщик, удаливший .git как «скрытый мусор», заканчивает так же
прыгните к корню — работает с любой глубины внутри репозитория
git rev-parse --show-toplevel   # prints the root when one exists
cd "$(git rev-parse --show-toplevel)"   # jump there in one step
репозитория никогда не было — верните историю
ls -a   # no .git here
git clone <url>   # the fix — again, not git init

git init не чинит репозиторий — он создаёт пустой там, где вы стоите.

04ПОСЛЕДНИЕ ТРИ ЕДУТ ЗА ВАМИ

оставшиеся три — средовые: ошибка экспортируется, висит или не родилась

улика: git работал здесь час назад
env | grep GIT_DIR     # GIT_DIR=/some/old/path
unset GIT_DIR
GIT_DIR экспортирован—один фиксированный путь заменяет поиск, и каждый «обычный» каталог становится «не репозиторием» — если возвращается каждое утро, где-то в ~/.bashrc, ~/.zshrc, или CI-обёртке он экспортируется: вычистите там
мёртвый указатель—.git однострочным файлом называет каталог в другом месте диска; цель перенесена или удалена → указатель висит и ошибка остаётся, даже если .git вот же он — git worktree repair перешивает что умеет, иначе: переклонируйте
submodule—папка есть в дереве родительского репо, но никогда не была инициализирована — нет ещё .git внутри; git submodule update --init --recursive из родителя её заполняет

бродяги без отслеживания путешествуют автостопом в скопированных деревьях — чистый проход их осаждает, как только клон на месте

■ честный штамп Проверено на: git 2.4x · bash + zsh · submodules и worktrees. Первая публикация 2026-09-28. Поиск с подъёмом, переопределение GIT_DIR и файл-указатель worktree — документированное поведение обнаружения git; пять причин — полный комплект за этой ошибкой, набранный с репозиториев, что вернулись.

конец пяти причин · ничего не fetched · всё локально