Очистка файла из 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
Добавьте силу в команду ветвления фильтра.