Я бы предложил использовать BFG , поскольку я знаю, что это спасло меня раз или два.
Вот краткое практическое руководство для вас:
- Убедитесь, что у вас установлена Java
- Установите BFG
Клонируйте ваш репозиторий полностью внутриновый репо:
$ git clone --mirror url/to/your/repo.git
Создайте файл с новой строкой для каждой строки, которую вы хотите удалить (каждая строка будет перезаписана как REMOVED по умолчанию):
$ echo "my_secret_API_key" >> secret.txt
$ echo "glob:AWS_*" >> secret.txt (search by glob pattern)
$ # search by regex pattern and change default rewritten text
$ echo "regex:password=\w+==>password=" >> secret.txt
Удалите определенные вами строки из истории репо с помощью BFG
:
$ bfg --replace-text secret.txt repo.git
$ cd repo.git
Сейчасвремя проверить свою историю и убедиться, что все прошло гладко:
Очистите хранилище со всеми внесенными нами изменениями
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
Нажмите ваши изменения (форсировать не нужно, потому что вы обновляли все ссылки)
$ git push
Для всех остальных, использующих репо, это должно быть простое обновление со следующим:
$ git fetch origin/branch
$ git checkout -B branch origin/branch
Дайте мне знать, если мне нужно что-то уточнить, я должен был сделать это раз или два для клиентов.