Задать вопрос
@HabrDima20

В Git коммит попал файл большой >100 mb как удалить?

В Git коммит попал файл >100 mb как удалить?
мне нужно его удалить с коммита, но после этого коммита были еще коммиты!
Коммиты должно остаться, а файлы или загрузить или удалить

050d105 HEAD@{10}: reset: moving to HEAD
050d105 HEAD@{11}: Branch: renamed refs/heads/master-2 to refs/heads/master
050d105 HEAD@{13}: reset: moving to HEAD
050d105 HEAD@{14}: Branch: renamed refs/heads/master to refs/heads/master-2
050d105 HEAD@{16}: Branch: renamed refs/heads/master-2 to refs/heads/master
050d105 HEAD@{18}: Branch: renamed refs/heads/master to refs/heads/master-2
050d105 HEAD@{20}: Branch: renamed refs/heads/master to refs/heads/master
050d105 HEAD@{22}: reset: moving to HEAD~1
fcf55bd HEAD@{23}: commit: add view/options
050d105 HEAD@{24}: Branch: renamed refs/heads/master to refs/heads/master


HEAD@{23} файлы нужны что здесь лежат!!!! пропали после команды git reset --hard HEAD~1
  • Вопрос задан
  • 1922 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
dyuriev
@dyuriev
A posteriori
Отвечу чуть подробнее чем спрашиваете:

Конкретный файл (www/video/route.mp4):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch www/video/route.mp4 ' --prune-empty --tag-name-filter cat -- --all

Файл по маске (*.mp4):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch "*.mp4" ' --prune-empty --tag-name-filter cat -- --all

Директорию (www/video):
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch www/video -r' --prune-empty --tag-name-filter cat -- --all


Данный способ не оптимальный, но универсальный - проверит всю историю коммитов и выпилит из коммитов данные файлы/каталоги и перепишет все что дальше

Пуш форсом отправляем все ветки в репозиторий
git push origin --force --all

не забываем сообщить другим разрабам что надо сделать git reset --hard origin/...

Warning: опробуйте сначала на тестовом репозитории (склонируйте текущий куда нибудь и потренируйтесь). Не хочу чувствовать себя виноватым, если вы выпилите что-то исторически-ценное
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
Удаление файла passwords.txt изо всех коммитов
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

Подробнее в пункте "Удаление файла из каждого коммита"
Учтите что вы меняете историю и git push вам не разрешат сделать, надо будет делать git push -f. Остальные в команде должны будут сделать
git fetch && git checkout master && git reset --hard origin/master
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы