Как мне полностью уничтожить файл из git-репо?
Я случайно отправил файл, на который у меня нет прав, в общедоступном репо.
Что я могу сделать, чтобы выборочно уничтожить этот единственный файл из репозитория, чтобы его данные полностью исчезли?
2 ответа
Git Filter-Branch - ваш друг в этом деле, хорошо задокументированный прекрасным Github
Предполагая, что коммит, в который вы добавили файл, является самым последним:
git reset --hard HEAD^
git push --force
Если у вас есть больше коммитов в репозитории, вы можете использовать интерактивное перебазирование, чтобы стереть этот коммит. использование git rebase -i xxx
с xxx
быть коммитом перед тем, кого вы хотите уничтожить. Затем в редакторе удалите строку, содержащую "плохой" коммит. Как только вы сохраните и выйдите из редактора, эта фиксация исчезнет навсегда. Если вы не можете удалить весь коммит, вы можете заменить pick
с edit
в файле и измените коммит (например, удалите файл из промежуточной области), а затем запустите git rebase --continue
Тем не менее, каждый, кто вытащил из вашего репо, должен будет выполнить тот же ребаз вручную. Но тогда этот файл в любом случае уже открыт, и вам не нужно переписывать историю, чтобы исправить свою ошибку.
Вместо всех перебазировок вы также можете использовать git-filter-branch
чтобы удалить файл, описанный в справке GitHub:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch NAME_OF_THE_FILE' --prune-empty -- --all
Конечно надо git push --force
после этой операции тоже, поскольку она также переписывает историю (со всеми предостережениями, если кто-то извлечет из этого хранилища и начнет работать над ним). Если ваш репозиторий находится на github, также не забудьте связаться с ним, чтобы очистить кеш вашего репозитория.