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


116

Я спробував видалити файл із віддаленого репо, запустивши:

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

Але Гіт скаржиться на це

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

Це було після того, як я вже видалив каталог .git-rewrite у Windows.

Як я можу видалити цей файл? Це файл 29 Мбіт, що сидить на моєму репо, тому мені цілком потрібно видалити файл.

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


1
Для пошукових систем: це також може застосовуватися, коли є ваше повідомлення про помилку .git-rewrite already exists, please remove it.
Дрю Ноакс

Відповіді:


219

Ви вже виконали операцію гілки фільтра. Після фільтр-гілки, Git зберігає рефлекси на старі події, якщо щось піде не так.

Ви можете їх знайти в .git/refs/original/…. Або видаліть цей каталог і всі файли всередині, або використовуйте -fпрапор, щоб змусити Git видалити старі посилання.

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

10
Нарешті дійшло до роботи, дякую! Я намагався прапор -f, але проблема полягала в тому, що я ставив його наприкінці команди, наприклад. ГОЛОВКА -f. Бачачи вашу команду, я змусив мене поставити прапор на старті, і воно спрацювало! = D
Кардін

12
опції flags ( -f) переходять до refs ( HEAD).
Перегляньте

Я все ще отримую ту саму помилку після додавання -f AND видалення каталогу. Будь-які ідеї?
Ярон

1
@knittl, я не звертався до цього git add. Я отримав ту саму помилку, що й оригінальний плакат, навіть після видалення .git/refs/original/папки та використання -fпрапора в git filter-branchкоманді. У моєму випадку рішенням було видалити .git/packed-refsфайл.
Ярон

1
@knittl, я знайшов, як це виправити, але не знайшов у чому проблема. В основному, я додав --ignore-unmatchкоманду, git rmі все пройшло гладко!
Габрієлій

21

Використовуйте цю команду для видалення оригінальної резервної копії:

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

Ось істота, яку я використовував для фільтрації гіт-репо: https://gist.github.com/k06a/25a0214c98bc19fd6817


Це правильне рішення для видалення резервної копії! Видалення .git/refs/original/не вирішує проблему.
Ерік Коопманс

Не забудьте змінити "майстра" на гілку, яку ви намагаєтеся виправити. У моєму випадку "розвивайтеся"
Даміан Грін

git show-ref | awk '/ refs.original.refs/{print$2}'щоб знайти всі резервні копії, які має ваше РЕПО.
День

4

У мене була така ж проблема, і відповідь вище не вирішила. Не залишилось .git / refs / original / каталог. Для мене було рішення видалити файл .git / packed-refs.


Та ж проблема. Немає .git/packed-refsфайлів, однак, і не папки originalв .git/refs. Хтось?
XedinНевідомий

Тут вирішено , додавши -rпрапор до команди.
Xedin Невідомий

Тут же проблема. Видалення пакованих реф-файлів вирішило проблему, але це також зруйнувало решту мого каталогу git, і мені довелося відновити з резервного копіювання.
Кевін Інь

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.