Очистка файла из Git repo не удалась, не удалось создать новую резервную копию

Я попытался удалить файл из удаленного репозитория, выполнив:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Но Git жалуется, что

Невозможно создать новую резервную копию. Предыдущая резервная копия уже существует в refs/original/
Принудительное перезаписывание резервной копии с помощью -f rm: не удается удалить /.git-rewrite/backup-refs: разрешение отклонено
rm: невозможно удалить каталог /.git-rewrite: каталог не пуст

Это произошло после того, как я уже удалил каталог .git-rewrite в Windows.

Как удалить этот файл? Это файл размером 29 Мб, сидящий на моем репо, поэтому мне нужно удалить файл.

Я попытался удалить фиксацию в git rebase -i, но, по-видимому, потому, что фиксация затронула множество разных файлов, Git жалуется на конфликты и я прерван, чтобы быть в безопасности.

Ответ 1

Вы уже выполнили операцию ветвления фильтра. После фильтрации-ветки Git хранит ссылки на старые коммиты, если что-то пойдет не так.

Вы можете найти их в .git/refs/original/…. Удалите этот каталог и все файлы внутри или используйте флаг -f, чтобы заставить Git удалить старые ссылки.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Ответ 2

Используйте эту команду для удаления исходной резервной копии:

git update-ref -d refs/original/refs/heads/master

Вот суть, которую я использовал для фильтрации ветвей my git repo: https://gist.github.com/k06a/25a0214c98bc19fd6817

Ответ 3

У меня была та же проблема, и ответ выше не исправил. Не осталось директорий .git/refs/original/. Решение для меня состояло в том, чтобы удалить файл .git/упакованный-refs.

Ответ 4

Добавьте силу в команду ветвления фильтра.