У меня есть фиксация с идентификатором 56f06019 (например). В этом коммите я случайно зафиксировал большой файл (50 МБ). В другом коммите я добавляю тот же файл, но нужного размера (маленький). Теперь мое репо, когда я клонирую, слишком тяжелое :( Как удалить этот большой файл из истории репо, чтобы уменьшить размер моего репо?
113
Ответы:
В главе 9 книги Pro Git есть раздел об удалении объектов .
Позвольте мне кратко изложить шаги здесь:
Как и в случае с описанным ранее вариантом перебазирования,
filter-branch
это операция перезаписи. Если вы опубликовали историю, вам придется--force
подтолкнуть новых ссылок.Этот
filter-branch
подход значительно мощнее, чемrebase
подход, поскольку онfilter-branch
также хранит резервные копии, поэтому размер репо не уменьшится сразу, если вы не истечете время рефлогов и сборки мусора:источник
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^..
Тогдаrm --recursive --force .git/refs/original
иrm --recursive --force .git/logs
потом я использовалgit prune --expire now
иgit gc --aggressive
Это сработало для меня лучше, чем ваши точные шаги, перечисленные выше. Спасибо за ссылку на книгу Git Pro, поскольку она была бесценной.Вы можете использовать инструмент git-extras . Команда Obliterate полностью удаляет файл из репозитория, включая прошлые коммиты и теги.
https://github.com/tj/git-extras/blob/master/Commands.md
источник
Я пробовал использовать следующий ответ в Windows https://stackoverflow.com/a/8741530/8461756
Одиночные кавычки не работают в окнах, вам нужны двойные кавычки.
Следующее сработало для меня.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv" - --all
После удаления большого файла я смог отправить свои изменения в мастер github.
источник
Вам нужно будет выполнить git rebase в интерактивном режиме, см. Пример здесь: Как мне удалить фиксацию на GitHub? и как удалить старые коммиты .
Если ваша фиксация находится в HEAD минус 10 коммитов:
После редактирования вашей истории вам нужно нажать "новую" историю, вам нужно добавить в
+
силу (см. Refspec в параметрах push ):Если другие люди уже клонировали ваш репозиторий, вы должны сообщить им, потому что вы только что изменили историю.
источник
git push --force
илиgit push -f
(который не требует, чтобы люди знали цель push ветки)git rm
на пути.Вы можете использовать простую команду для удаления
источник