У меня была такая же ситуация (также слились репо и та же ошибка).В моем случае некоторые старые коммиты действительно содержали неправильно сформированные .gitmodules
.Поскольку мы не используем подмодули в нашем объединенном репо, и мне было все равно, чтобы сохранить даже действительный .gitmodules
, способ, которым я решил проблему, заключался в простом удалении всех .gitmodules
файлов из всей истории.Примечание: этот подход эффективно переписывает всю историю, сохраняя все коммиты как есть (минус .gitmodules
), но давая им новые хэши.
Для этого есть утилита .
Или, если вы хотите сделать это вручную (в значительной степени скопировано из утилиты):
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitmodules' --force -- --branches --tags
rm -rf .git/refs/original/ .git/refs/remotes/ .git/*_HEAD .git/logs/
(git for-each-ref --format="%(refname)" refs/original/ || echo :) | xargs --no-run-if-empty -n1 git update-ref -d
git reflog expire --expire-unreachable=now --all
git repack -q -A -d
git gc --aggressive --prune=now